月度歸檔:2013年10月

[3D圖形學]視錐剔除入門(翻譯)

最近在學3D圖形學...看到篇不錯的視錐剔除入門教程,於是搬來翻譯了...

時至今日,許多剛剛下海的3D引擎程序員仍不了解視錐剔除(Frustum Culling)的重要性和益處,這讓我和我的小夥伴們感到很震♂驚.我在Flipcode論壇中發現儘管網絡上有海量的相關資料,仍有許多人提出對視錐剔除實現的問題.因此我決定撰寫這篇文檔,簡單描繪出我現在所使用的四叉樹剔除引擎(Quad-tree Culled Engine)的工作方式.誠然,市面上有許多種成熟且高效的視錐剔除算法,但我認為這個算法足以用來學習視錐剔除的理論基礎.在正式開始前我還想說明一件事,以前我一直把Frustum(平截頭體)打成Frustrum(截頭錐),為此我沒少被論壇上的人噴.在這裡我承認Frustum是正確的拼寫.對那些以前被我冒犯的人我表示抱歉...你們這群吹毛求疵的傻[嗶-]...

大多數人已經知道什麼是視錐剔除了(譯者:如果你是手滑誤點進來的...視錐剔除是一個圖形渲染前的步驟,用於剔除掉不需要繪製的部分).視錐(準確說是平截頭體Frustum)的形狀酷似一個塔尖被削平了的金字塔,更準確地說,是一個四稜錐的頂點偏下位置被一個裁面(Clipping Plane,見圖1)裁斷.事實上,視錐本身就是由6個面所組成.這6個面被稱為近裁面,遠裁面,上裁面,下裁面,左裁面,右裁面.視錐剪裁僅僅是一個用來判斷物體是否需要被繪製的過程.儘管從本質上講視錐剔除應該是三維層面的,但事實上大多數時候它僅僅需要以純代數的方法便能解決.這也是為什麼我如此推崇視錐剔除的原因,它非常的快(如果算法好的話),而且是在渲染管線(Rendering Pipeline)之前進行的,不像背面剔除(Backface Culling)那樣需要在渲染管線之後一個頂點一個頂點地計算.對於被剪裁掉的物體都不會將其送入顯卡(譯者:那是...被剔除掉的壓根都不用渲染),因此視錐剔除對渲染速度有巨大的改善,畢竟什麼都不渲染是最快的渲染... 閱讀全文 [...]