2010-09-18 76 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