4

我正在尝试在 GLSL 片段着色器中使用与场景中对象的未缩放(从前剪裁平面的真实距离)距离。gl_FragCoord.z 值比我预期的要小。在我的顶点着色器中,我只是使用 ftransform() 来设置 gl_Position。当我预计它们在 15 到 20 之间时,我看到的值在 2 到 3 之间。

如何获得真实的眼空间深度?谢谢!

4

1 回答 1

5

将您想要的任何内容作为顶点着色器的变量传递。

片段着色器中可用的 Z 值已根据您的 z-near/z-far(来自投影矩阵)和 DepthRange 进行了标准化。所以这不是你所追求的。从技术上讲,您可以尝试通过恢复在顶点着色器之后发生的 Z 上的各种 OpenGL 操作来重建它,但这可能比仅仅传递您想要的更麻烦(从恢复投影矩阵是非线性的事实开始) , 确切地。

附带说明一下,您要计算gl_ModelViewMatrix * gl_Vertex的 Z 是从视点来看的 Z,而不是近 Z 平面。

于 2010-04-26T08:38:59.303 回答