2016-02-07 64 views
2

我想知道使用可編程管線進行平截頭體剔除的最有效方式是什麼。我的意思是,如果我理解正確,按照此處描述的方法:Geometric Aproach(順便說一下,那裏曾經爲我工作過的唯一方法),像glGetFloatv(GL_MODELVIEW_MATRIX,...)這樣的函數不再有效,因爲在着色器階段計算最終頂點位置。我必須在客戶端計算我在呈現之前必須檢查的每個邊界框變換的平面視覺平面嗎?使用着色器時有效的平截體剔除

謝謝。

回答

0

截錐體剔除的想法是防止首先將多邊形發送到GPU,那些已知的多邊形將在頂點着色器之後被撲滅。所以想法是阻止頂點着色器轉換這些多邊形。使用着色器或不使用着色器,最好的方法是跟蹤客戶端的錐臺,並遍歷場景圖(可以是層次樹或只是一個列表),並剔除位於視錐外的對象,並且不要使用glGetFloatv或者它相當於效率不高,因爲它會從GPU複製數據。您可以改用feedback buffers

+0

感謝您的提示。我已經在客戶端跟蹤平截體,但是再次,按照上述的剔除方法,我需要最終的模型視圖矩陣來提供算法,該矩陣對於每個模型都是唯一的,並且其最終值在頂點計算着色器,因此在着色器調用之前,我必須重新計算每個我必須檢查的模型的視錐體,即使相機沒有移動。我錯過了什麼嗎?因爲這對我來說聽起來不合邏輯。提前致謝。 – NapardBlose

+0

您必須跟蹤每個對象的轉換,並計算客戶端的模型視圖矩陣並應用平截視覺剔除,這樣可以避免每次從GPU獲取矩陣。我不知道你現在給你的着色器提供什麼,但你可以在CPU上計算模型視圖矩陣並將它傳遞給着色器。 – concept3d

+0

這就是我正在做的事情,似乎我在正確的道路上,謝謝! – NapardBlose