碎片着色器 眼空间 未缩放深度坐标

4

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

如何获取真正的眼空间深度呢? 谢谢!

1个回答

5
从顶点着色器传递任何你想要的varying变量。在片段着色器中可用的Z值已经根据投影矩阵中的z-near / z-far和DepthRange进行了归一化处理。因此,它不是直接您想要的结果。从技术上讲,您可以尝试通过反转顶点着色器后发生的各种OpenGL操作来重建它,但这可能比只是准确传递你想要的东西(从开始就是一个非线性的投影矩阵)更麻烦。另外,使用“gl_ModelViewMatrix * gl_Vertex”计算出的Z值是从视点而不是近-Z平面的Z值。

1
太棒了,我刚刚将-(gl_ModelViewMatrix * gl_Vertex).z作为一个浮点数传递,并且这正是我所需要的。 - Ben Jones

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接