2010-09-18 17 views
5

tengo este código, que es el contexto "#version 330 core"¿Qué es gl_ModelViewMatrix y gl_ModelViewProjectionMatrix en OpenGL moderno?

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; 

Qué parte de ella es vieja gl_ModelViewMatrix y qué parte es gl_ModelViewProjectionMatrix? (¿Qué es gl_ProjectionMatrix que se utilizó para crear ModelViewProjection?)

Respuesta

6

No estoy muy familiarizado con GLSL 3.3, pero apuesto a que PerspectiveViewMatrix (es incluso Builin funcionalidad?) Construye la matriz que sustituye edad gl_ProjectionMatrix orden interna

gl_ModelViewMatrix en general es el producto de la matriz de transformación del objeto en el espacio mundial y su propia transformación "local", por lo que se puede definir como el producto de TranslationMatrix, RotationMatrix y TransformationMatrix.


Debe enviar todas las matrices al sombreador usted mismo, p. como uniformes. Estas matrices debes construir tú mismo (por ejemplo, usando GLM). Ejemplo lento para una matriz de proyección:

// 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

Todas estas matrices están en desuso y se han eliminado del contexto principal últimamente. La pregunta era cuál es el equivalente de ellos hoy en día, con un ejemplo de ese código que no usa funciones obsoletas. –

+0

@Lela Dax: ejemplo agregado – erjot