История изменений
Исправление I-Love-Microsoft, (текущая версия) :
Здесь можно почитать про уравнения связывающие угловую скорость и ориентацию.
Почитал книгу, но не до конца, ибо надо внимательно вдумываться в формулы и сравнивать.
Надо по хорошему считать.
Разобрался как применять кватернионы для вращения объекта (смотрю оси и куб в OpenGL - просто делаю glLoadMatrixf для матрицы перемещения объекта, а Qt предоставляет классы для кватерниона).
Сделал так:
vis_gac vd;
QQuaternion quat;
quat = QQuaternion::fromAxisAndAngle(1, 0, 0, f_xyz[0]) * quat;
quat = QQuaternion::fromAxisAndAngle(0, 1, 0, f_xyz[1]) * quat;
quat = QQuaternion::fromAxisAndAngle(0, 0, 1, f_xyz[2]) * quat;
vd.q = quat;
vis_data.append(vd);
Кубик крутится, но в конце всё равно не возвращается в изначальное положение (а должен).
Вопрос: так как же правильно считать? Где конкретно это описано?
Я правильно понимаю, что сам факт того что я раздельно делаю движения по осям - неверно? Что гироскоп дает связанные данные о движении? Как же тогда загрузить это в кватернион? Показания гироскопа задать как вектор, а каков же скаляр?
Прощу прощения, но как было непонятно, пока и остается.
Исправление I-Love-Microsoft, :
Здесь можно почитать про уравнения связывающие угловую скорость и ориентацию.
Почитал книгу, но не до конца, ибо надо внимательно вдумываться в формулы и сравнивать.
Надо по хорошему считать.
Разобрался как применять кватернионы для вращения объекта (смотрю оси и куб в OpenGL - просто делаю glLoadMatrixf для матрицы перемещения объекта, а Qt предоставляет классы для кватерниона).
Сделал так:
vis_gac vd;
QQuaternion quat;
quat = QQuaternion::fromAxisAndAngle(1, 0, 0, f_xyz[0]) * quat;
quat = QQuaternion::fromAxisAndAngle(0, 1, 0, f_xyz[1]) * quat;
quat = QQuaternion::fromAxisAndAngle(0, 0, 1, f_xyz[2]) * quat;
vd.q = quat;
vis_data.append(vd);
Кубик крутится, но в конце всё равно не возвращается в изначальное положение (а должен).
Вопрос: так как же правильно считать? Где конкретно это описано?
Исходная версия I-Love-Microsoft, :
Здесь можно почитать про уравнения связывающие угловую скорость и ориентацию.
Почитал книгу, но не до конца, ибо надо внимательно вдумываться в формулы и сравнивать.
Надо по хорошему считать.
Разобрался как применять кватернионы для вращения объекта (смотрю оси и куб в OpenGL - просто делаю glLoadMatrixf для матрицы перемещения объекта, а Qt предоставляет классы для кватерниона).
Сделал так:
vis_gac vd; QQuaternion quat; quat = QQuaternion::fromAxisAndAngle(1, 0, 0, f_xyz[0]) * quat; quat = QQuaternion::fromAxisAndAngle(0, 1, 0, f_xyz[1]) * quat; quat = QQuaternion::fromAxisAndAngle(0, 0, 1, f_xyz[2]) * quat; vd.q = quat; vis_data.append(vd);
где fromAxisAndAngle принимает значения в градусах.
Кубик крутится, но в конце всё равно не возвращается в изначальное положение (а должен).
Вопрос: так как же правильно считать? Где конкретно это описано?