2010-02-16 236 views

回答

10

背景剔除是OpenGL確定哪些面朝向遠離觀看者並因此未被看見。想想立方體。無論你如何旋轉立方體,3個臉部將永遠隱形。找出它們面對的是哪些,將它們從要繪製的多邊形列表中刪除,並且您只將圖形列表的一半減半。

深度緩衝相當簡單。對於繪製的每個多邊形的每個像素,將它的z值與z緩衝區進行比較。如果它小於z緩衝區中的值,則將z緩衝區值設置爲新的z緩衝區值。如果不是,則丟棄該像素。深度緩衝提供了非常好的結果,但可能相當緩慢,因爲每個像素都需要查找值。

實際上,這兩種方法之間沒有任何相似之處,它們通常都被使用。給定一個立方體,你可以首先使用剔除剪出一半的多邊形,然後使用z緩衝來繪製它們。

剔除可以減少渲染的多邊形,但它不是一種排序算法。這就是Z緩衝。

+1

不是OpenGL背面剔除只是剔除面的背面,即面向內部的立方體面? (我非常確定Mikeb的答案是正確的)。 – mk12

6

給定的三角形有兩面,正面和背面。你正在看的一面是由點出現在頂點列表(也稱爲繞組)中的順序決定的。典型的三角形列表具有交替纏繞,因此您可以重複使用前兩個點,但條帶中給定三角形的朝向不交替。背面剔除是優化步驟,將場景中離開視圖的三角形從要繪製的三角形列表中移除。

深度緩衝區(z緩衝區)用於掛起已經渲染的最近的東西(深度相對於視圖)。如果抽籤表中下一個出現的東西落在我已經繪製的東西的後面(即,它的深度使得它更遠),我可以跳過繪製它,因爲它被阻擋。如果繪製的新東西更接近,我繪製它,然後用新的更接近的值更新深度緩衝區。