【发布时间】:2014-10-15 14:44:14
【问题描述】:
我正在尝试计算相对于 object 的 depth。
这是检索相对于 depth 的好方法>相机:Depth as distance to camera plane in GLSL
varying float distToCamera;
void main()
{
vec4 cs_position = glModelViewMatrix * gl_Vertex;
distToCamera = -cs_position.z;
gl_Position = gl_ProjectionMatrix * cs_position;
}
在此示例中,深度是相对于相机。
但我想获得相对于对象的深度。如果我离物体很近或很远,我想要相同的深度和价值。
这是我想要实现的一个示例。在左侧,您可以看到深度是相对于相机的。而在右侧,即使相机从物体移回,深度也保持不变,因为它取决于物体。
【问题讨论】:
-
非常模糊,我得到的印象是你真正想到的是线性深度。精度分布不随距离变化的地方。您可以非常简单地线性化透视深度缓冲区,或者像多年前在透视 Z 缓冲成为事实上的标准之前所做的那样使用
w坐标。 -
这个公式很奇怪——“如果我离物体近或远,深度和值相同”——听起来像是一个常数值。也许如果你写了你需要它做什么。顺便说一句,您不需要分离 MVP 和投影矩阵 - gl_Position.w 最终包含来自相机的深度。
-
很抱歉,如果配方完全错误地陈述。我制作了一个小 gif 来说明我想要实现的目标。
标签: opengl directx glsl shader hlsl