Вектор направления от Кватерниона?

У меня есть Quaternion, представляющий вращение плеча трехмерного персонажа. У меня также есть линия, которая должна представлять новое положение руки этого персонажа. Положение этих линий задается двумя трехмерными точками.

Это единственные данные, которые у меня есть, и я пытаюсь вызвать метод в 3D-пакете (Digital Rune), который принимает 2 вектора направления и возвращает Quaternion, представляющий вращение, необходимое для перемещения руки в новое положение.

Проблема в том, что я вижу какое-то странное поведение, как будто оси перепутаны, и это просто обычно не ведет себя. Кроме того, объект Quaternion (который находится в 3D-пакете), представляющий руку 3D-парней, имеет W, X, Y и Z. Представляют ли X, Y и Z вектор направления? Потому что это то, что мне нужно для правильного вызова функции. Я использовал это вместе с моим вычисленным вектором направления от конечных точек моей линии, но, как я уже сказал, это выглядит забавно.

Если X, Y и Z не являются вектором направления, как преобразовать из кватерниона в две конечные точки, чтобы я мог вычислить вектор направления?


person Nicros    schedule 22.12.2011    source источник
comment
это может быть полезно stackoverflow.com/q/1171849/10468 и stackoverflow.com/q/2646121/10468   -  person DarenW    schedule 23.12.2011


Ответы (1)


В вашем контексте (и в большинстве контекстов компьютерной графики) кватернион используется для представления вращения. Вы не хотите использовать X, Y и Z напрямую; вместо этого (как описано в вышеупомянутом руководстве) вы используете его для создания матрицы вращения. Затем вам следует использовать матрицу вращения, как и любую другую матрицу трехмерного преобразования; он будет вращать точки вокруг начала координат, как описано кватернионом, из которого он произошел.

X, Y и Z кватерниона действительно представляют ось вращения, но кватернион также кодирует величину вращения, но не очень-то просто. Если ваш пакет включает функции, возвращающие кватернион, он также должен включать функции, которые превращают его кватернионы в матрицы вращения; вы должны использовать упакованную функцию, если это возможно (потому что она должна использовать те же соглашения, что и метод, который их создал).

После прочтения кватернионов и матриц преобразований вам следует внимательно перечитать документацию по рассматриваемой функции, чтобы убедиться, что вы предоставляете правильные типы аргументов, и чтобы убедиться, что вы правильно используете результаты ( достаточно легко облажаться, даже если вы знакомы с математикой ...).

person comingstorm    schedule 24.12.2011