OpenGL背面剔除究竟是什麼?你能舉一個具體的例子嗎?一個三角形?OpenGL新手問題:什麼是背面剔除?
回答
如果仔細觀察,可以在很多視頻遊戲中看到這方面的例子。任何時候,相機意外移動到一個對象 - 通常是像角色這樣的移動對象 - 注意到世界如何繼續正確渲染。這是因爲形成角色皮膚的三角形的背面沒有被渲染;它們實際上是透明的。如果情況並非如此,那麼每次相機意外地移動到物體內部時,屏幕會變黑(因爲物體的內部沒有點亮),或者您會對物體的外觀看起來像是奇怪的透視圖從裏面。
背面剔除是指不指定離開相機/視點的三角形進行繪製。
Wikipedia定義此爲:
它是在圖形管線,測試當投影到屏幕上多邊形中的點是否出現在順時針或逆時針順序的步驟。如果用戶指定前向多邊形具有順時針纏繞,如果投影在屏幕上的多邊形具有逆時針纏繞,則它已被旋轉以背向相機並且不會被繪製。
其他系統使用臉部法線並且使點積與視線方向一致。
這是決定是否繪製三角形的一種相對快速的方法。考慮一個立方體。在任何時候,立方體的三個邊將遠離用戶,因此不可見。即使這些被吸引,它們也會被三個「前沿」方面所掩蓋。通過執行背面剔除,可以減少從12到6(每面2個)繪製的三角形數量。
背面剔除最適合封閉「固體」物體,如立方體,球體,牆壁。
有些系統不具備此功能,因爲他們認爲面是雙面的,因此可以從任一方向看到。
三角形的座標以特定順序指定,順時針IIRC。
當圖形引擎從一個特定的方向看一個三角形,並且座標是逆時針方向時,它知道它正在通過一個物體看着三角形的背面。由於物體的正面覆蓋三角形,因此不必繪製。
這只是和優化技術。
當你看一個封閉的物體時,比如說一個立方體,你只能看到大約一半的面孔:朝向你的面孔(或者,至少不面向你的面孔總是被另一面朝你點)
如果跳過繪製所有這些向後面對的表面,它會產生兩種後果: - 渲染時間將是(平均) 兩次更好 - 最後的渲染不會改變(因爲另一,前面的臉將被畫在「已選中」的臉上)
所以你基本上可以免費獲得x2 perf。
爲了知道三角形是正面還是背面,您可以使用v0-v1和v0-v2,製作一個叉積。這給你正常的臉。如果這個矢量對着你(點(正常,viewVector)< 0),繪製。
- 1. Opengl鏡像變換背面剔除
- 2. Box背面剔除
- 3. 使用Molehill背面剔除
- 4. XNA - 剔除性能問題
- 5. Linux上的SDL OpenGL新手,這有什麼問題?
- 6. OPENGL ARB_occlusion_query閉塞剔除
- 7. 遏制剔除矩形問題
- 8. Python中的數據剔除問題
- 9. opengl截錐體剔除glGet *調用
- 10. 使用曲面法線進行正視3D背面剔除
- 11. OpenGL ES 1.1:剔除與附近剪輯平面 - 性能
- 12. 新手問題,這裏'收益'是什麼意思?
- 13. Python新手問題 - 我無法弄清楚我的問題到底是什麼
- 14. 禁用背面剔除導入的.obj文件three.js
- 15. 填充立方體(背面剔除算法)?
- 16. 新手問題
- 17. 面試問題:什麼是散列表?
- 18. 爲什麼剔除會移除未被遮擋的立方體的面部?
- 19. OpenGL背面紋理
- 20. 手動剔出DataGridView
- 21. OpenGL:什麼是MatrixMode?
- 22. 什麼是OpenGL RBO?
- 23. OpenGL alpha混合問題與背面可見
- 24. 新手f#問題
- 25. DHTML新手問題
- 26. codeigniter新手問題
- 27. Feedparser新手問題
- 28. 新手OO問題
- 29. Erlang新手問題
- 30. XAML新手問題
我還是不明白它:)如果我有一個紅色的三角形,它應該在兩種情況下繪製(頂點以cw或ccw順序)。面對剔除,如果我從後面看它,三角形就會消失。 – fhucho 2010-08-29 14:28:28
@fhucho - 在這種情況下,您正在考慮三角形實際上是雙面的,並且想要將臉部剔除「關閉」。 – ChrisF 2010-08-29 14:31:20
謝謝,我現在明白了。 – fhucho 2010-08-29 14:35:14