2010-09-18 4 views
5

Je possède ce code qui est le contexte « #version 330 core »Qu'est-ce que gl_ModelViewMatrix et gl_ModelViewProjectionMatrix dans OpenGL moderne?

gl_Position =   PerspectiveViewMatrix(90.0, AspectRatio, 0.01, 1000.0 ) 


         * TranslationMatrix(0, 0, -4 -0.35*MouseWheel)   


         * RotationMatrix(MouseMovement.y, X_AXIS)   
         * RotationMatrix(-MouseMovement.x, Y_AXIS)  
         * RotationMatrix(float(Strafing*3), Z_AXIS)  


         * TransformationMatrix 

         * in_Vertex; 

Quelle partie est vieux gl_ModelViewMatrix et quelle partie est gl_ModelViewProjectionMatrix? (Qu'est-ce gl_ProjectionMatrix qui a été utilisé pour créer ModelViewProjection?)

Répondre

6

Je ne suis pas trop familier avec GLSL 3.3, mais je parie que PerspectiveViewMatrix (est-il même Builin fonctionnalité?) Construit matrice qui remplace l'ancien builtin gl_ProjectionMatrix

gl_ModelViewMatrix en général est le produit de la matrice de transformation de l'objet dans l'espace du monde et de sa propre transformation "locale", donc il peut être défini comme le produit de TranslationMatrix, RotationMatrix et TransformationMatrix.


Vous devez envoyer toutes les matrices au matériau vous-même, par ex. comme des uniformes. Ces matrices vous devez construire vous-même (par exemple en utilisant GLM). Lazy exemple pour une matrice de projection:

// in your app 

std::array<GLfloat, 16> projection; 

glMatrixMode(GL_PROJECTION); 
glPushMatrix(); 
gluOrtho(...); 
glGetFloatv(GL_PROJECTION_MATRIX, projection.data()); 
glPopMatrix(); 

glUniformMatrix4fv(glGetUniformLocation(ShaderProgramID, "ProjectionMatrix"), 1, GL_FALSE, projection.data()); 

// in vertex shader 

uniform mat4 ProjectionMatrix; 
in vec4 InVertex; 

void main() { 
    gl_Position = ProjectionMatrix * InVertex; 
} 
+3

Toutes ces matrices sont désapprouvées et supprimées du contexte de base ces derniers temps. La question était de savoir quel est l'équivalent d'eux aujourd'hui, avec un exemple de code ci-dessus qui n'utilise pas de fonctionnalités obsolètes. –

+0

@Lela Dax: exemple ajouté – erjot