我有这个代码是上下文“#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?)
答案 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;
}