xrot
, yrot
и zrot
определяют ось вращения, заданную кватернионом.Я не думаю, что вы хотите использовать их в вашем addTranslation()
вызове ... в общем, это не имеет никакого отношения к направлению движения.
Что я имею в виду под этим:Ваш трехмерный объект - скажем, ради аргумента, что это самолет - будет иметь определенное предпочтительное направление движения в своей исходной системе координат.Поэтому, если исходная ориентация имеет центр масс в начале координат и пропеллер где-то вдоль оси + X, плоскость хочет лететь в направлении + X.
Теперь вы вводите некоторое преобразование координат, которое вращаетСамолет в другую ориентацию.Это вращение описывается матрицей вращения или, что то же самое, кватернионом.В каком направлении самолет хочет двигаться после поворота?
Вы можете найти это, взяв единичный вектор в направлении + X: (1,0, 0,0, 0,0), затем применив к этому вектору матрицу вращения или кватернион, чтобы преобразовать его в новую систему координат.(Затем масштабируйте его по скорости, как вы делали выше.) Компоненты X, Y и Z преобразованного масштабированного вектора дают желаемое добавочное движение по каждой оси.Этот преобразованный вектор обычно , а не будет осью вращения кватерниона, и я думаю, что это, вероятно, ваша проблема.