2010-04-26 82 views
3

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

我怎样才能获得真实的眼部空间深度? 谢谢!

回答

4

从顶点着色器中随意传递任何想要的东西。

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

作为一个侧面说明,您将使用gl_ModelViewMatrix * gl_Vertex来计算的Z是从角度来看的Z,而不是近Z平面。

+1

太棒了,我只是通过' - (gl_ModelViewMatrix * gl_Vertex).z'作为变化的浮动,这正是我所需要的 – 2010-04-26 16:35:29