为什么我的深度值在这个怪异的范围内?

时间:2013-06-29 18:29:28

标签: opengl range glsl depth-buffer deferred-rendering

在我的延迟渲染器中,深度缓冲区包含的值大约为0.97001.0000。我通过在给定深度范围内绘制黑色像素来发现这一点。这是我使用的着色器代码。

bool inrange(in float position)
{
    float z = texture2D(depth, coord).r;
    return abs(position - z) < 0.0001;
}

void main()
{
    if(inrange(0.970)) image = vec3(0);
    else result = texture2D(image, coord);
}

这就是它的样子。我尝试了几个深度值。此图片用于深度值0.998

screenshot

我使用GL_DEPTH24_STENCIL8类型的纹理和格式GL_FLOAT_32_UNSIGNED_INT_24_8_REV作为深度和模板附件。

是否有解释我的深度值在此范围内?这是默认行为吗?我希望它们在0.00001.0000范围内。

1 个答案:

答案 0 :(得分:2)

听起来非常接近原点的剪裁平面附近的视角。构建透视矩阵时,尝试尽可能远离原点设置近剪裁。