我需要在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)部分。
注意:
关于opengl - 在Cg中访问OpenGL状态变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14358/