私は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