2008-08-18 14 views
3

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

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 Art

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 

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.