簡體   English   中英

OpenGL,何時應該繪制,何時不應該繪制

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM