2010-04-13 53 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,例如),你會得到神器。