2010-04-13 55 views
0

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

回答

2

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

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

问题是,该值具有不同的精度。这就是各位进来的地方.16位Z缓冲区的内存是32位Z缓冲区的一半,但不能代表相同的范围。内存不是很便宜(当然,这是变化的,但仍然),所以如果你不需要很多精度的话,使用16位并节省内存。 (这在过去更为重要,因为内存真的很稀少。)

试图将太多值存储在无法保存它们的缓冲区中时,会导致它们结合(例如,16.5和15.5都会变成16,例如),你会得到神器。