Как вращать объект вокруг точки, используя кватернионы? - PullRequest
5 голосов
/ 22 мая 2009

В моем 3D-приложении я сохраняю положение объекта в векторе, а его вращение вокруг начала координат в кватернионе. Мне нужно повернуть объект вокруг вектора с произвольным началом. Я попытался преобразовать положение - vectorOrigin и вращение в матрицу, вращая матрицу, а затем извлекая положение и вращение как вектор и кватернион из полученной матрицы. Положение подходит нормально, но вращение остается постоянным (объект вращается вокруг заданного вектора, но он всегда обращен в одном направлении).

Мой метод неверен или у меня ошибка?

Ответы [ 2 ]

8 голосов
/ 22 мая 2009

Я не уверен, почему вы ожидаете, что вращение изменится. У вас есть программные «существа», представляющие начальную точку, конечную точку и поворот. Вычисление точки назначения на основе двух других «существ» не должно повлиять на них.

А как насчет обычного подхода? Если вам нужно повернуть положение (x, y, z) вокруг точки (a, b, c), сначала переведите положение так, чтобы вращение было вокруг начала координат: используйте (xa, yb, zc) в качестве позиции поверните вокруг начала координат, как обычно, чтобы получить новую переведенную позицию (x'-a, y'-b, z'-c), переведите назад и получите новую позицию (x ', y', z ').

1 голос
/ 22 мая 2009

Я не знаком с кватернионами, и, возможно, это совершенно оффтопно, но вы не можете вращать 3d-объект вокруг точки, ось вращения должна быть линией.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...