Ich muss auf die OpenGL-Statusvariablen (wie die MVP-Matrizen) in meinem Cg-Shader-Programm zugreifen. Ich übergebe diese Werte manuell an mein Cg-Shader-Programm unter Verwendung von Aufrufen wie cgGLSetStateMatrixParameter()
in meinem C/C++ - Code. Gibt es einen einfacheren Weg dies zu tun?Zugriff auf OpenGL-Statusvariablen in Cg
3
A
Antwort
4
Wenn Sie auf jede relativ neue Cg Profil sind (arbvp1 und später), Ihre Cg Shader-Programme können in der Tat Zugang der OpenGL-Zustand (MVP Matrices, Material und Licht-Einstellungen) direkt. Dies macht das Schreiben dieser Programme weniger schmerzhaft.
Hier sind einige der Zustandsvariablen, die zugegriffen werden kann:
Matrizen aller ArtMVP:
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
Licht und Materialeigenschaften:
state.material.ambient
state.material.diffuse
state.material.specular
state.light[0].ambient
Für die vollständige Liste der Statusvariablen finden Sie im Abschnitt Zugriff auf OpenGL-Status, OpenGL ARB Vertex-Programmprofil (arbvp1) in der Cg Users Manual.
Hinweis:
- der OpenGL All Zustandsvariablen sind von einheitlichen Typ, wenn in Cg abgerufen.
- Für Licht Variablen ist der Index obligatorisch. (ZB: 1 in state.light [1] .amient)
- Beleuchtung oder Licht (e) müssen nicht aktiviert werden, um die entsprechenden Lichtwerte in Cg zu verwenden. Sie müssen jedoch unter Verwendung der Funktionen glLight() eingestellt werden.