2010-09-18 8 views
5

Ho questo codice che è contesto "#version nucleo 330"Che cos'è gl_ModelViewMatrix e gl_ModelViewProjectionMatrix nella moderna OpenGL?

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; 

Quale parte di esso è vecchio gl_ModelViewMatrix e quale parte è gl_ModelViewProjectionMatrix? (Che cosa è gl_ProjectionMatrix che è stato utilizzato per creare ModelViewProjection?)

risposta

6

Io non sono troppo familiarità con GLSL 3.3, ma scommetto che PerspectiveViewMatrix (è ancora Builin funzionalità?) Costrutti matrice che sostituisce vecchio incorporato gl_ProjectionMatrix

gl_ModelViewMatrix in generale è il prodotto della matrice di trasformazione dell'oggetto nello spazio mondiale e la sua propria trasformazione "locale", quindi può essere definita come il prodotto di TranslationMatrix, RotationMatrix e TransformationMatrix.


È necessario inviare tutte le matrici allo shader da soli, ad es. come uniformi. Queste matrici ti servono per costruirti (ad esempio usando GLM). Esempio pigro per una matrice di proiezione:

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

Tutte queste matrici sono deprecate e rimosse dal contesto principale ultimamente. La domanda era qual è l'equivalente di loro al giorno d'oggi, con un esempio che il codice sopra il quale non usa funzionalità deprecate. –

+0

@Lela Dax: esempio aggiunto – erjot