我已經實現了一個由OpenGL渲染的小場景圖,所有對象都來自一個普通的Node
類,在OpenGL幀渲染期間,我只是調用了根節點的visit
方法,並且它遍歷了圖遞歸。開始遍歷時,第一個矩陣是攝像機矩陣。3D場景圖遍歷問題
的visit
方法是這樣的:
void Node::visit(const QMatrix4x4 &mv) {
QMatrix4x4 m = mv;
m.rotate(m_rot);
m.translate(m_pos);
m.scale(m_scale);
m_effectiveMV = m;
for (int i = 0; i < m_children.size(); i++) {
m_children[i]->visit(m_effectiveMV);
}
draw(); // draws if this node has anything to draw,
// otherwise just transformation.
}
的問題,我的經驗是,當我一個子節點設置旋轉,旋轉恰好相對於父節點,而不是周圍的節點本身。任何人都可以發現我在這裏做錯了嗎?
我認爲這是這樣的:一個男人拿着槍,槍圍繞着男人轉動,而不是在自己的起源「轉向」。它是否正確? – ssell
是的,就是這樣。 – rgngl