我已经实现了一个由 OpenGL 渲染的小场景图,所有对象都派生自一个公共Node
类,在 OpenGL 帧渲染期间,我只调用visit
根节点的方法,它递归地遍历图。我开始遍历时传递的第一个矩阵是相机矩阵。
该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.
}
我遇到的问题是,当我为子节点设置旋转时,旋转是相对于父节点发生的,而不是围绕节点本身。谁能发现我在这里做错了什么?