2008-08-18 6 views
3

J'ai besoin d'accéder aux variables d'état OpenGL (telles que les matrices MVP) dans mon programme Cg Shader. Je passe ces valeurs à mon programme Cg Shader manuellement en utilisant des appels tels que cgGLSetStateMatrixParameter() dans mon code C/C++. Y a-t-il un moyen plus facile de faire cela?Accès aux variables d'état OpenGL dans Cg

Répondre

4

Si vous êtes sur une assez récente profil Seizième (arbvp1 et versions ultérieures), vos programmes de shaders ne peut en Cg accès fait l'état OpenGL (matrices de MVP, le matériel et les réglages de lumière) directement. Cela rend l'écriture de ces programmes moins douloureuse.

Voici quelques-unes des variables d'état qui peut être consulté:

matrices de MVP de tous les types:

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 

lumière et propriétés des matériaux:

state.material.ambient 
state.material.diffuse 
state.material.specular 
state.light[0].ambient 

Pour la liste complète des Variables d'état, reportez-vous à la section Accès à l'état OpenGL, profil de programme OpenGL ARB Vertex (arbvp1) dans le Cg Users Manual.

Note:

  • Toutes les variables d'état OpenGL sont de type uniforme quand on y accède en Seizième.
  • Pour lumière variables, l'indice est obligatoire. (Par exemple: 1 dans state.light [1] .ambient)
  • Il n'est pas nécessaire d'activer l'éclairage ou la lumière pour utiliser les valeurs de lumière correspondantes dans Cg. Mais, ils doivent être définis en utilisant les fonctions glLight().