片段着色器眼睛空间未缩放的深度坐标

时间:2010-04-26 03:47:33

标签: opengl glsl fragment-shader

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

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

1 个答案:

答案 0 :(得分:4)

根据顶点着色器传递任何你想要的内容。

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

作为旁注,你用gl_ModelViewMatrix * gl_Vertex计算的Z是从视角看的Z,而不是近Z平面。