Zugriff auf OpenGL Zustands-Variablen in Cg
Frage
Ich zugreifen zu können, müssen OpenGL Zustands-Variablen (wie Sie das MVP-Matrizen) in meiner Cg-shader-Programm.Ich bin vorbei, diese Werte zu meiner Cg-shader-Programm manuell über Aufrufe wie cgGLSetStateMatrixParameter()
in meinem C/C++ - code.Gibt es einen einfacheren Weg, dies zu tun?
Lösung
Wenn Sie sich in einem ziemlich den letzten Cg-Profil (arbvp1 und höher), Ihre Cg-shader-Programme können in der Tat Zugriff auf die OpenGL-Zustand (MVP Matrizen -, material-und Licht-Einstellungen) direkt.Dadurch wird das schreiben von diesen Programmen weniger schmerzhaft.
Hier sind einige der Variablen, die zugegriffen werden kann:
MVP-Matrizen aller Art:
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 material-Eigenschaften:
state.material.ambient
state.material.diffuse
state.material.specular
state.light[0].ambient
Für die vollständige Liste der Variablen finden Sie im Abschnitt Zugriff auf OpenGL-Zustand, OpenGL ARB Vertex Program Profile (arbvp1) in der Cg Benutzer Handbuch.
Hinweis:
- Alle OpenGL-state-Variablen sind uniform geben, wenn der Zugriff in der Cg.
- Für Licht Variablen, die index ist obligatorisch.(Z.B.:1 Zustand.Licht[1].ambient)
- Beleuchtung oder Licht(s) braucht nicht aktiviert werden, damit diejenigen, die entsprechende Licht-Werte in Cg.Aber Sie müssen eingestellt werden, mit glLight() Funktionen.