现代OpenGL中的gl_ModelViewMatrix和gl_ModelViewProjectionMatrix是什么?

时间:2010-09-18 08:30:01

标签: opengl opengl-3

我有这个代码是上下文“#version 330 core”

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? (什么是用于创建ModelViewProjection的gl_ProjectionMatrix?)

1 个答案:

答案 0 :(得分:6)

我对GLSL 3.3并不太熟悉,但我敢打赌,PerspectiveViewMatrix(它甚至可以构建功能吗?)构造替换旧内置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;
}