#java #libgdx #quaternions
#java #libgdx #кватернионы
Вопрос:
Как мы поворачиваем кватернион в libgdx вокруг определенной оси?
var rotation = new Quaternion().setEulerAngles(0.0f, 0.0f, 90.0f);
// How do we rotate that quaternion around X axis 90 degrees ?
Ответ №1:
Поворот кватерниона означает: умножьте другой кватернион справа или слева от вашего исходного кватерниона (в зависимости от пространства, которое вы хотите повернуть). Если, например, вы хотите, чтобы вектор сначала повернулся на 90 градусов вокруг оси X, а затем на 90 градусов вокруг оси Z, то этого можно добиться с помощью следующего кода:
// your quaternion (rotation of 90 degrees around Z axis)
Quaternion rotation = new Quaternion().setEulerAngles(0, 0, 90);
// quaternion expressing rotation of 90 degrees around X axis
Quaternion x90deg = new Quaternion().setEulerAngles(0, 90, 0);
// concatenation (right-multiply) of the X rotation with the Z rotation
Quaternion result = new Quaternion(rotation).mul(x90deg);
// test: rotate (0, 0, 1) around X axis 90 deg, followed by Z axis 90 deg
// the first rotation will yield (0, -1, 0), and the second rotation (1, 0, 0) as a result
Vector3 v = new Vector3(0, 0, 1);
result.transform(v);
// v = (1, 0, 0)