Вращение с кватернионом не совсем верно - PullRequest
1 голос
/ 29 октября 2011

Исходя из моего предыдущего вопроса , теперь мне удалось повернуть мой объект кватернионами, но все еще существует небольшая проблема, и я не знаю, как ее решить. С кодом ниже мой объект вращается вокруг осей X и Y. Но он всегда возвращается в исходное положение, когда я переключаюсь между клавишами x и y. Поэтому я никогда не получаю поворот с новой позиции, но всегда с той, с которой началась программа.

Quaternion q1    = quaternion->quat_rotate(anglex,1,0,0);
Quaternion q2    = quaternion->quat_rotate(angley,0,1,0);
quaternion->mult(q1,q2);
quaternion->quat_matrix(Matrix);
glMultMatrixf(Matrix);
object->drawObject(Red,Green,Blue);

Надеюсь, вы понимаете, о чем я.

1 Ответ

1 голос
/ 29 октября 2011

Но он всегда возвращается в исходное положение, когда я переключаюсь между клавишами x и y. Поэтому я никогда не получаю поворот с новой позиции, а всегда с той, с которой началась программа.

Конечно, это так. Ваш код делает именно то, что вы говорите. Вы не показали нам, что делает Quaternion::mult(Quaterion&q1,Quaterion&q1), но я подозреваю, что он заменяет содержимое экземпляра кватерниона на произведение q1 и q2. Вам нужно умножить текущую ориентацию на q1 * q2, чтобы получить новую ориентацию, а не заменять текущую ориентацию на q1 * q2.

...