我正在研究opengl,我有一些带有一些物体的小3d场景。在 GLSL 顶点着色器中,我将矩阵上的顶点相乘,如下所示:
vertexPos= viewMatrix * worldMatrix * modelMatrix * gl_Vertex;
gl_Position = vertexPos;
vertexPos 是一个 vec4 可变变量,我将它传递给片段着色器。以下是场景正常渲染的方式: normal render
但后来我想做一个调试渲染。我在片段着色器中写:
gl_FragColor = vec4(vertexPos.x, vertexPos.x, vertexPos.x, 1.0);
vertexPos 乘以所有矩阵,包括透视矩阵,我假设我会得到从屏幕中心到右边缘的平滑渐变,因为它们映射为 -1 到 1 平方。但看起来它们在屏幕空间中,但没有应用透视变形。这是我看到的:(不要看红线和光源,它们使用不同的着色器)
如果我将它除以大约 15,它将看起来像这样:
gl_FragColor = vec4(vertexPos.x, vertexPos.x, vertexPos.x, 1.0)/15.0;
有人可以解释一下,为什么坐标不均匀并且场景仍然正确渲染透视失真?PS 如果我尝试将 gl_Position 放在片段着色器而不是 vertexPos 中,它不起作用。