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.
}
私が経験する問題は、子ノードに回転を設定すると、ノード自体ではなく、親ノードを基準にして回転が発生することです。誰かが私がここで間違っていることを見つけることができますか?