Извлеченные из страницы википедии , кажется, что если вы хотите выполнить поворот на 180 ° вокруг оси z , то соответствующий поворот кватерниона будет просто:
0 0 0 1
Ключом здесь является формула , где (w, x, y, z) = (a, b, c, d).
Действительно, поскольку cos (90 °) = 0 и sin (90 °) = 1, затем замена альфа на 180 ° и u на (0, 0, 1) дает вам (0, 0, 0, 1).
Редактировать : Как указал Кристиан, направление вверх не обязательно должно быть z , но может быть любым единицей вектором u = (x, y, z) (в противном случае нормализуем его делением на его норму).В этом случае соответствующий поворот кватериона на 180 ° будет
0 x y z
Теперь, чтобы применить это вращение для перемещения вокруг объекта, скажем, у вас есть положение и векторы направления вашей камеры c_pos
иc_dir
, затем просто (слева) соедините его с помощью q = (0 x y z)
и соответственно измените положение камеры.Что-то вроде
c_dir = q * c_dir * q^-1
c_pos = 2 * o_pos - c_pos
, где o_pos
- это позиция объекта, а c_dir
следует преобразовать в кватернион с 0 вещественными частями.