2012-08-13 83 views
2

例如,如果我們有鄰投影:OpenGL的投影裁剪

left = -aspect, right = aspect, top = 1.0, bottom = -1.0, far = 1.0, near = -1.0 

,並會在-2.0畫三角形,它將由近裁剪平面切割。它真的會節省一些寶貴的渲染時間嗎?

如果我們需要繪製某些東西並放棄(如果不在我們的視圖中)(由頂點着色器/主程序中的程序員編寫),則剔除確定。剪貼==便宜的自動撲殺?

也只是便宜撲殺主題 - 將

if(dist(cam.pos, sprite.pos) < MAX_RENDER_DIST) 
draw_sprite(sprite); 

剛好夠簡單的2D遊戲?

回答

2

對於x,y和z,默認的OpenGL裁剪空間是-1到+1。

精靈距離的條件測試將起作用。這是不需要的,因爲遠裁剪機將做幾乎相同的事情。通常這是夠好的。有些情況下需要測試。相機轉動時,剪輯平面內角落中的物體可能會出現在遠剪裁平面之外。原因在於從相機到角落的距離比從相機到遠剪裁平面的垂直距離長。如果您有2D遊戲並且不允許更改相機視角,則這不是問題。

如果你有一個簡單的2D遊戲,機會很高,你不必擔心圖形優化。如果您在裁剪平面外繪製精靈,則可節省時間。但是,您節省多少時間取決於。如果大量的精靈在外面,你可以節省相當多的時間。但是,你應該考慮使用什麼算法,而不是繪製那些無法顯示的東西。如果只有一小部分精靈在外面,那麼節省的時間將可以忽略不計。

2

在GPU中裁剪的問題是它發生在pipeline相對較晚的時候,就在光柵化之前,所以很多計算已經可以毫無作爲地完成了。

在CPU上執行它可以節省這些計算的發生,而且非常重要的是,減少實際繪圖命令的數量(這也可能是一個瓶頸)。

但是,您確實希望在CPU中快速執行此操作,通常您會使用octree或類似表示數據,因此您可以一次丟棄整個子樹。如果您必須分別瀏覽每個多邊形或對象,則可能會變得非常昂貴。

所以最後:有用性取決於你的瓶頸在哪裏(CPU,頂點着色器,傳輸速率,...)。