C++ 理解z缓冲区格式directx

C++ 理解z缓冲区格式directx,c++,c,directx,directx-10,C++,C,Directx,Directx 10,z缓冲区只是一个3d数组,显示应该在另一个对象前面写入的对象。数组中的每个元素表示一个像素,该像素包含0.0到1.0之间的值。我的问题是,如果这就是z缓冲区的全部功能,那么为什么有些缓冲区是24位、32位和16位的呢?z缓冲区不是3D数组。它是一个2D数组,每个像素都有一个值。该值表示写入该位置的最后一个像素的深度 如果挂起像素的深度在Z缓冲区上的当前值之后,则该像素不可见,因此将跳过该像素。这就是允许以任何顺序渲染对象的原因:后面的像素不会覆盖前面的像素;它们将被丢弃 问题是,该值具有不同的精

z缓冲区只是一个3d数组,显示应该在另一个对象前面写入的对象。数组中的每个元素表示一个像素,该像素包含0.0到1.0之间的值。我的问题是,如果这就是z缓冲区的全部功能,那么为什么有些缓冲区是24位、32位和16位的呢?

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

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

问题是,该值具有不同的精度。这就是比特的作用。16位Z缓冲区占用的内存是32位Z缓冲区的一半,但不能表示相同的范围

内存不是很便宜(嗯,这正在改变,但仍然如此),所以如果您不需要很多精度,请使用16位并节省内存。(这在过去更为重要,因为在过去,人们的记忆力确实很差。)

试图在缓冲区中存储太多无法保存的值将导致它们合并(例如,16.5和15.5都变为16),并且您会得到工件