在我的延迟渲染器中,深度缓冲区包含的值大约为0.9700
到1.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
。
我使用GL_DEPTH24_STENCIL8
类型的纹理和格式GL_FLOAT_32_UNSIGNED_INT_24_8_REV
作为深度和模板附件。
是否有解释我的深度值在此范围内?这是默认行为吗?我希望它们在0.0000
和1.0000
范围内。
答案 0 :(得分:2)
听起来非常接近原点的剪裁平面附近的视角。构建透视矩阵时,尝试尽可能远离原点设置近剪裁。