5

我有这段代码,它是上下文“#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 是什么?)

4

1 回答 1

5

我对 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;
}
于 2010-09-18T11:10:56.300 回答