我正在尝试在GLSL片段着色器中使用未缩放的(距离前剪裁平面的真实距离)距离到场景中的对象。 gl_FragCoord.z值小于我的预期。在我的顶点着色器中,我只使用ftransform()来设置gl_Position。当我预计它们在15到20之间时,我看到2到3之间的值。
如何获得真实的眼睛空间深度? 谢谢!
答案 0 :(得分:4)
根据顶点着色器传递任何你想要的内容。
碎片着色器中可用的Z值已经基于z-near / z-far(来自投影矩阵)和DepthRange进行了归一化。所以它不是你所追求的。从技术上讲,你可以尝试通过恢复在顶点着色器之后发生的Z上的各种OpenGL操作来重建它,但它可能更麻烦(从恢复投影矩阵的事实开始是非线性的)而不仅仅是传递你想要的东西,确切地说。
作为旁注,你用gl_ModelViewMatrix * gl_Vertex
计算的Z是从视角看的Z,而不是近Z平面。