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