在Cg中访问OpenGL状态变量
时间:2020-03-05 18:40:17 来源:igfitidea点击:
我需要在我的Cg着色器程序中访问OpenGL状态变量(例如MVP矩阵)。我使用C / C ++代码中的cgGLSetStateMatrixParameter()
之类的调用将这些值手动传递给Cg着色器程序。有没有更简单的方法可以做到这一点?
解决方案
回答
如果我们使用的是最新的Cg配置文件(arbvp1和更高版本),则Cg着色器程序实际上可以直接访问OpenGL状态(MVP矩阵,材质和光照设置)。这使编写这些程序的痛苦减轻了。
以下是一些可以访问的状态变量:
所有类型的MVP矩阵:
state.matrix.mvp state.matrix.inverse.mvp state.matrix.modelview state.matrix.inverse.modelview state.matrix.modelview.invtrans state.matrix.projection state.matrix.inverse.projection
灯光和材质特性:
state.material.ambient state.material.diffuse state.material.specular state.light[0].ambient
有关状态变量的完整列表,请参阅《 Cg用户手册》中的"访问OpenGL状态"," OpenGL ARB顶点程序配置文件(arbvp1)"部分。
笔记:
- 在Cg中访问时,所有OpenGL状态变量均为统一类型。
- 对于轻型变量,该索引是强制性的。 (例如:在state.light [1] .ambient中为1)
- 无需启用照明或者灯光以使用Cg中的那些相应的灯光值。但是,需要使用glLight()函数进行设置。