我正在尝试在 GLSL 片段着色器中使用到场景中对象的未缩放(距前剪裁平面的真实距离)距离。 gl_FragCoord.z 值比我预期的要小。在我的顶点着色器中,我只使用 ftransform() 来设置 gl_Position。当我期望它们在 15 到 20 之间时,我看到的是 2 到 3 之间的值。
我怎样才能获得真正的眼空间深度?
谢谢!
最佳答案
将您想要的任何内容作为顶点着色器的变量传递。
片段着色器中可用的 Z 值已经根据您的 z-near/z-far(来自投影矩阵)和 DepthRange 进行了标准化。所以这不是你所追求的直接。从技术上讲,您可以尝试通过恢复顶点着色器之后发生的 Z 上的各种 OpenGL 操作来重建它,但这可能比仅仅传递您想要的更麻烦(从恢复投影矩阵是非线性的事实开始) , 确切地。
作为旁注,您将使用 gl_ModelViewMatrix * gl_Vertex
计算的 Z是从角度来看的 Z,而不是近 Z 平面。
关于opengl - 片段着色器眼空间未缩放深度坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2711050/