在Cg中访问OpenGL状态变量

时间:2008-08-18 09:10:54

标签: opengl variables state cg

我需要在我的Cg着色器程序中访问 OpenGL状态变量(例如MVP矩阵)。我正在使用我的C / C ++代码中的cgGLSetStateMatrixParameter()等调用手动将这些值传递给我的Cg着色器程序。有更简单的方法吗?

1 个答案:

答案 0 :(得分:4)

如果您使用的是最新的 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)部分。< / p>

注意:

  • 在Cg中访问时,所有OpenGL状态变量都是统一类型。
  • 对于 light 变量, index 是必需的。 (例如: state.light [1] .ambient 中的1)
  • 无需启用照明或灯光即可在Cg内使用相应的灯光值。但是,需要使用 glLight()函数设置它们。