Вектор направления от кватерниона? - PullRequest
7 голосов
/ 23 декабря 2011

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

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

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

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

1 Ответ

8 голосов
/ 25 декабря 2011

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

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

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

...