理解z缓冲区格式直接x

时间:2010-04-13 20:09:46

标签: c++ c directx directx-10

z缓冲区只是一个3d数组,它显示了应该在另一个对象前写入的对象。数组中的每个元素表示一个值为0.0到1.0的像素。我的问题是,如果这是一个z缓冲区,那么为什么有些缓冲区是24位,32位和16位?

1 个答案:

答案 0 :(得分:2)

Z-Buffer不是3D阵列。它是一个2D数组,每个像素都有一个值。该值表示写入该位置的最后一个像素的深度。

如果待处理像素的深度落在Z缓冲区上的当前值之后,则该像素不可见,因此将被跳过。这是允许以任何顺序渲染对象的原因:后面的像素不会覆盖前面的像素;他们将被丢弃。

问题是,该值具有不同的精度。这是位进入的位置.16位Z缓冲区占用的内存是32位Z缓冲区的一半,但不能代表相同的范围。

内存不是很便宜(嗯,这种情况正在发生变化,但仍然存在),所以如果你不需要很多精度就可以使用16位并节省内存。 (这在过去更为重要,记忆确实很少。)

尝试在无法容纳它们的缓冲区中存储太多值会导致它们组合(例如,16.5和15.5都变为16),并且你会得到工件。