我有这个代码,它是上下文“#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 是什么?)
最佳答案
我对 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;
}
关于opengl - 现代 OpenGL 中的 gl_ModelViewMatrix 和 gl_ModelViewProjectionMatrix 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3740905/