z 缓冲区只是一个 3d 数组,它显示应该在另一个对象前面写入什么对象。数组中的每个元素代表一个像素,其值介于 0.0 到 1.0 之间。我的问题是,如果这就是 az buffer 所做的一切,那么为什么有些缓冲区是 24 位、32 位和 16 位的?
问问题
262 次
1 回答
2
Z-Buffer 不是 3D 数组。这是一个二维数组,每个像素都有一个值。该值表示写入该位置的最后一个像素的深度。
如果待处理像素的深度低于 Z-Buffer 上的当前值,则该像素不可见,因此将被跳过。这就是允许以任何顺序渲染对象的原因:后面的像素不会覆盖前面的像素;它们将被丢弃。
问题是,该值具有不同的精度。这就是位的来源。16 位 Z-Buffer 占用的内存是 32 位 Z-Buffer 的一半,但不能表示相同的范围。
内存并不便宜(嗯,这种情况正在改变,但仍然如此),所以如果你不需要很多精度,请使用 16 位并节省内存。(这在过去更为重要,因为记忆真的很稀缺。)
试图将太多的值存储在无法容纳它们的缓冲区中会导致它们组合(例如,16.5 和 15.5 都变为 16),并且您会得到工件。
于 2010-04-13T20:29:08.823 回答