Чего я не знаю, так это как вращать точку, используя вращение vec3, которое у меня есть.
Простой: не надо.
Подача рыскания - ужасный способ кодирования ориентации, особенно для системы анимации. Вместо этого используйте кватернион. Это 4 значения, а не 3, и код для поворота хорошо известен.
Кроме того, он не требует таких тяжелых операций, как sin
и cos
.
Если вы хотите сравнить и сопоставить необходимые усилия, рассмотрите математику.
Учитывая кватернион q
, позицию v
, вам нужно сделать это, чтобы повернуть его:
vec3 temp = cross(q.xyz, v) + q.w * v;
vec3 rotated = v + 2.0*cross(q.xyz, temp);
Это немного математики. Теперь рассмотрим, что вы должны сделать для своего дела YPR, учитывая:
vec3 cosYPR = cos(ypr);
vec3 sinYPR = sin(ypr);
Это не все. Но этого достаточно . Это три cos
и три sin
операции. Это не быстрые операции. Это само по себе, вероятно, занимает столько же времени, сколько вычисление вращения кватерниона / вектора. Но после этого вам нужно сделать несколько умножений и сложений для вычисления матрицы 3х3. И затем, после всего этого, вам все же нужно сделать фактическую матрицу умноженной, чтобы повернуть вектор.