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