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

标签 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 是什么?)

最佳答案

我对 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/

相关文章:

c++ - 带 OpenGL 的 2D 引擎 : Use Z buffer or own implementation for sprite sorting?

c++ - OpenGL 3.x核心sampler2DRect (GL_TEXTURE_RECTANGLE)示例

c++ - Multisample framebuffer 仅与 renderbuffer 不完整

c++ - 具有坐标、法线和颜色的交错 VBO

c++ - 从哪里获得最新的 OpenGL32.lib?

c++ - 我是否必须为每个渲染的网格在每一帧调用 glVertexAttribPointer()?

c++ - 在多个显示器上使用 GLX RHEL -- OpenGL、XLib 和多个显示器(带线程)

OpenGL 2D非矩形区域裁剪

java - 为什么当我要求 30 FPS 时,这段代码有时会报告 21.3 FPS?

c++ - 在 OpenGL 中创建并实现元球皮肤系统