我需要在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 Users Manual中的访问OpenGL状态,OpenGL ARB顶点程序配置文件(arbvp1)部分。

注意:
  • 在Cg中访问时,所有OpenGL状态变量均为统一类型。
  • 对于轻型变量,索引是必需的。 (例如:在state.light [1] .ambient中为1)
  • 无需启用照明或光源即可使用Cg内部的那些相应光源值。但是,需要使用 glLight()函数进行设置。
  • 关于opengl - 在Cg中访问OpenGL状态变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14358/

    10-09 16:15