3

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

4

1 回答 1

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 用户手册中的访问 OpenGL 状态、OpenGL ARB 顶点程序配置文件 (arbvp1)部分。

笔记:

  • 在 Cg 中访问时,所有 OpenGL 状态变量都是统一类型的。
  • 对于变量,索引是强制性的。(例如:state.light[1].ambient中的 1 )
  • 不需要启用照明或灯光以使用 Cg 内的那些相应的灯光值。但是,它们需要使用glLight()函数进行设置。
于 2008-08-18T09:11:13.117 回答