Я реализовал небольшой граф сцены, который будет отображаться 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.
}
Проблема, с которой я сталкиваюсь, заключается в том, что, когда я устанавливаю ротацию для дочернего узла, ротация происходит относительно родительского узла, а не вокруг самого узла. Кто-нибудь может заметить, что я здесь делаю не так?