opengl - 片段着色器眼空间未缩放深度坐标

标签 opengl glsl fragment-shader

我正在尝试在 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/

相关文章:

c - 使用 OpenCL 传输

qt - 将 QML 的 ShaderEffect 剪辑为圆形

GLSL如何设置平面的透明度?

OpenGL:将 View 空间坐标投影到 NDC,结果似乎超出 [-1,1] 范围

ios - 片段着色器的输入纹理会随着着色器的运行而变化吗?

c++ - 如何在 MS VS2010 的 64 位 Windows 7 上安装 GLUT?

c++ - 如何在cocos2d-x中制作清晰的纹理

opengl - 片段着色器 : output variables

opengl - 同一程序中可以有多个像素(片段)着色器吗?

ios - OpenGL : Circle bevel with fragment shader?