2010-09-18 36 views
5

我有這樣的代碼是上下文「的#Version 330芯」什麼是現代OpenGL中的gl_ModelViewMatrix和gl_ModelViewProjectionMatrix?

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; 

哪一部分是老gl_ModelViewMatrix,哪一部分是gl_ModelViewProjectionMatrix? (什麼是gl_ProjectionMatrix是用於創建ModelViewProjection?)

回答

6

我不是太熟悉GLSL 3.3,但我敢打賭,PerspectiveViewMatrix(它甚至builin功能?)構建矩陣,取代舊的內置gl_ProjectionMatrix

gl_ModelViewMatrix一般是世界空間中對象變換矩陣與自身「局部」變換的乘積,所以它可以定義爲TranslationMatrix,RotationMatrix和TransformationMatrix的乘積。


您需要將所有矩陣自己發送到着色器,例如,作爲制服。這些矩陣需要自行構建(例如使用GLM)。投影矩陣的惰性示例:

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

所有這些矩陣最近都被棄用並從核心上下文中刪除。現在的問題是他們現在有什麼相同之處,例如上面的代碼不使用已棄用的功能。 – 2010-09-18 11:35:12

+0

@Lela Dax:添加了示例 – erjot 2010-09-18 12:57:06