Есть ли способ рассчитать положение XYZ перед вращением кватерниона (XYZW), предпочтительно используя GLM?
Я знаю вращение Quat и положение объекта, для которого я хочу рассчитать положение перед.
Я знаю, как рассчитать положение перед матрицей вращения, где у вас есть вектор Front, вектор Up и Right, но в этом случае у меня есть только значения XYZW (где W всегда равно 0, я никогда не вижу, чтобы оно стало 1 .. ?)
Короче говоря:
Данные у меня есть: Quat (X Y Z W)
а также Position(X Y Z)
и я хочу рассчитать PositionInFront(Position, Quat, Distance, &X, &Y, &Z)
Как достичь этой цели?
Я попытался привести к 3x3matrix и выполнить вычисления Up, Right, Front (потому что приведение матрицы 3×3 — это эти значения, верно?), Но они не возвращают правильные позиции.
Или можно было бы определить объекты Z Angle? (вращение вокруг мировой оси Z / высота только)
Казалось, что для автомобиля было еще 2 кватернионных конструкции, которые я забыл использовать. и эти 3 являются полным набором, необходимым для формулы вычисления Front, Right, Up:
float offX = 10.0f;
float offY = 0.0f;
float offZ = 0.0f;
float x = offX * info.Rotation.Front.x + offY * info.Rotation.Right.x + offZ * info.Rotation.Up.x + info.Pos.x;
float y = offX * info.Rotation.Front.y + offY * info.Rotation.Right.y + offZ * info.Rotation.Up.y + info.Pos.y;
float z = offX * info.Rotation.Front.z + offY * info.Rotation.Right.z + offZ * info.Rotation.Up.z + info.Pos.z;
float Angle = (atan2(x-info.Pos.x, y-info.Pos.y) * 180.0f / PI);
Других решений пока нет …