2010-08-29 137 views

回答

15

如果仔細觀察,可以在很多視頻遊戲中看到這方面的例子。任何時候,相機意外移動一個對象 - 通常是像角色這樣的移動對象 - 注意到世界如何繼續正確渲染。這是因爲形成角色皮膚的三角形的背面沒有被渲染;它們實際上是透明的。如果情況並非如此,那麼每次相機意外地移動到物體內部時,屏幕會變黑(因爲物體的內部沒有點亮),或者您會對物體的外觀看起來像是奇怪的透視圖從裏面。

11

背面剔除是指不指定離開相機/視點的三角形進行繪製。

Wikipedia定義此爲:

它是在圖形管線,測試當投影到屏幕上多邊形中的點是否出現在順時針或逆時針順序的步驟。如果用戶指定前向多邊形具有順時針纏繞,如果投影在屏幕上的多邊形具有逆時針纏繞,則它已被旋轉以背向相機並且不會被繪製。

其他系統使用臉部法線並且使點積與視線方向一致。

這是決定是否繪製三角形的一種相對快速的方法。考慮一個立方體。在任何時候,立方體的三個邊將遠離用戶,因此不可見。即使這些被吸引,它們也會被三個「前沿」方面所掩蓋。通過執行背面剔除,可以減少從12到6(每面2個)繪製的三角形數量。

背面剔除最適合封閉「固體」物體,如立方體,球體,牆壁。

有些系統不具備此功能,因爲他們認爲面是雙面的,因此可以從任一方向看到。

+0

我還是不明白它:)如果我有一個紅色的三角形,它應該在兩種情況下繪製(頂點以cw或ccw順序)。面對剔除,如果我從後面看它,三角形就會消失。 – fhucho 2010-08-29 14:28:28

+0

@fhucho - 在這種情況下,您正在考慮三角形實際上是雙面的,並且想要將臉部剔除「關閉」。 – ChrisF 2010-08-29 14:31:20

+0

謝謝,我現在明白了。 – fhucho 2010-08-29 14:35:14

1

三角形的座標以特定順序指定,順時針IIRC。

當圖形引擎從一個特定的方向看一個三角形,並且座標是逆時針方向時,它知道它正在通過一個物體看着三角形的背面。由於物體的正面覆蓋三角形,因此不必繪製。

+1

它實際上是默認情況下的其他方式 - CCW點表示前向三角形,CW點表示後向。不過,有一種方法可以改變這一點。 – cHao 2010-08-29 14:49:44

+0

我相信默認情況下,Direct3D是CCW,前者默認爲OpenGL,前者默認爲CW。 – Octopus 2013-10-12 03:37:25

+0

OpenGL默認爲CCW。它可以用'glFrontFace(GL_CW)'來改變。 DirectX默認爲CW。 – 2017-12-17 06:29:12

2

這只是和優化技術。

當你看一個封閉的物體時,比如說一個立方體,你只能看到大約一半的面孔:朝向你的面孔(或者,至少不面向你的面孔總是被另一面朝你點)

如果跳過繪製所有這些向後面對的表面,它會產生兩種後果: - 渲染時間將是(平均) 兩次更好 - 最後的渲染不會改變(因爲另一,前面的臉將被畫在「已選中」的臉上)

所以你基本上可以免費獲得x2 perf。

爲了知道三角形是正面還是背面,您可以使用v0-v1和v0-v2,製作一個叉積。這給你正常的臉。如果這個矢量對着你(點(正常,viewVector)< 0),繪製。