我有一個用C++編寫的用opengl編寫的標準場景圖。優化場景圖
我的場景圖有節點和形狀。
節點是矩陣,並且在應用它們的矩陣之後繪製所有的孩子。
void Node::draw(Affine3f amatrix) const
{
amatrix = amatrix * matrix;
for (Drawable* child : childern)
{
child->draw(amatrix);
}
}
形狀是簡單地打包維也納各組織,他們採取的矩陣從所述繪製調用,將其設置爲均勻的模型視圖矩陣,然後繪製VBO。
void Shape::draw(Affine3f mat) const
{
renderer.setModelView(mat);
myVertices.draw();
}
我喜歡這個設計,它非常簡單靈活。但是,這是非常低效的,大量的CPU端矩陣乘法和大量的繪製調用。
我的問題是:
如何我可以優化該設計,同時去除不需要的矩陣乘法和不必要的繪製調用?
就像不重新計算矩陣每個繪製(只計算改變)和聯合形狀,以便他們可以用一個調用繪製。
一些詳細信息:
- 形狀是靜態的(現在),包含的頂點將永遠不會改變。
- 有靜態幾何(住在沒有操縱根節點)和動態幾何(操作節點的孩子)
如果你能更清楚地定義你想要的東西,它會更容易回答。從我的角度來看,除非您創建不必要的節點(這不是設計問題,而是您如何使用它),否則您的設計既不包含未計算的矩陣乘法,也不包含不必要的繪製調用。那麼你到底需要什麼,以及如何進行不必要的乘法/繪製調用? – Grizzly 2011-12-29 16:28:58