我已经实现了一个由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