2010-09-27 121 views
5

我是OpenGL的新手。我正在使用JOGL。對Frustum Culling感到困惑

我念叨平截面消隱:

http://www.lighthouse3d.com/opengl/viewfrustum/

http://www.crownandcutlass.com/features/technicaldetails/frustum.html

我不知道到底是什麼應該做的。 OpenGL不會自動挑選離屏對象嗎? (這種剔除比僅僅不發送對象的速度慢得多)

從我正在閱讀的內容看,它看起來並不像這樣可以避免在另一個背景中被遮擋的繪圖對象,觀看平截頭體。這是否意味着唯一的好處是避免將離屏對象發送給OpenGL?

+0

第二個鏈接保存我的一天,謝謝! :-) – 2014-01-03 17:56:04

回答

1

當你做了你在代碼中的平截頭體檢查時,你使用簡單的幾何體來包裝被繪製的對象。這可以比試圖剔除每個三角形的卡快得多。

4

是的,你基本上是對的。遏制剔除切斷相機金字塔外的物體。 OpenGL在渲染一個場景時,當然也會這樣做,但是以每個頂點爲基礎。每個對象的剔除剔除工作及其性能提升潛力因此要高得多。
其中一個瓶頸是在CPU和GPU之間傳輸數據。如果您需要僅傳輸室外場景中所有對象/頂點的1/4,則截錐體剔除可以提供很好的性能提升。

3

最快的對象是你根本不需要繪製的對象。

通常情況下,對於已經非常簡單的對象,您將提供一個簡化的保守邊界體積。這樣,您可以在不處理複雜對象中的每個三角形的情況下進行截錐體剔除。

避免相互隱藏的繪製對象被稱爲遮擋剔除。閉塞剔除通常比平截頭剔除更復雜;但是請注意,它仍然可以使用相同的簡化邊界體積。

3

是 - 截錐體剔除只是移除完全位於視錐體之外的物體。沒有更多或更少。是的,與OpenGL本身相比,您可以提高性能,特別是如果您可以一次剔除大量項目(例如,視圖庫可能能夠快速切割圖的整個分支)。

還有也面臨淘汰,去除了面向觀衆的三角形(或其他),但這是與平截體剔除分開的。

有幾種處理被其他對象遮擋的對象的方法。遮擋剔除是最簡單的,但OpenGL不直接支持它(儘管一些硬件可以作爲擴展)。另一個是深度緩衝區 - OpenGL直接支持。不同之處在於遮擋剔除會查看整個對象,如果完全遮擋,則根本不會呈現它。深度緩衝區在逐個片段的基礎上工作,所以它只發生在(幾乎)完全渲染對象之後。取決於處理多少個對象(以及這樣做),自己進行遮擋剔除可能會是一個非常大的勝利(因爲它可以避免在深度緩衝區可以完成之前進行大量渲染)。