![](/img/trans.png)
[英]Should I declare a method const, when underlying OpenGL state is modified
[英]OpenGL, when should I draw and when should I not
想象一下,我擁有我的相機,並且在3D openGL上下文中(使用透視圖)有兩個正方形,如下所示:
從頂部:
/
/
/ Square 1
Camera -> + V Square 2
\ | V
\ | |
\ |
因此,我要做的是使用glBegin()
和glEnd()
並讓Z緩沖區完成其工作。 到現在為止還挺好。
現在,想象一下,我想在某些人會落后於其他人的情況下繪制100萬個正方形。 這樣會更快,為所有人完成最后提到的過程,或者也許我可以做一些數學運算,然后舍棄我不需要繪制的數學運算。 例:
if (should_I_Draw_It)
{
glBegin();
/*Draw*/
glEnd();
}
編輯:
這是一個動態場景,可以創建,銷毀,移動和/或修改對象。
您要執行的操作稱為遮擋剔除。 簡單的算法在CPU上效率很低,僅當前景中有大對象而背景中有小對象時才應使用它們。
Nvidia在GPU Gems第29章中介紹了一種有效的遮擋剔除方法。 您可以嘗試這樣做以提高渲染效率
這么多動態對象的遮擋剔除幾乎總是比僅繪制所有內容慢。 在動態場景中,您最好的選擇就是只進行非常簡單的視景剔除。 問題在於,由於您僅繪制每個具有6個四邊形的框,因此僅繪制所有四邊形而不是花時間來決定是否應繪制它們,可能仍會更快。
不管您執行的最簡單的測試是什么,都要檢查盒子是否相對於您所看的方向直接位於相機后面/垂直於相機,以及是否與相機相距足夠的距離(邊界半徑)以不與相機相交。
現代的圖形驅動程序會在某種程度上自動優化它所做的/不做的事情,因此您可以依靠它來有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.