Вращение кватерниона без углов Эйлера
Вэтот комментарий было настоятельно предложено, чтобы мы никогда не использовали углы Эйлера. Я понимаю, что есть некоторые ограничения на углы Эйлера, в частности, карданный замок, но яВы хотели бы знать лучшую технику или набор техник, которые обычно используются при отсутствии углов Эйлера? Большинство рассуждений на эту тему включают преобразование угла Эйлера в кватернион, и это очень просто. Но единственный способ, которым я когда-либо читал о том, чтобы делать вращение без углов Эйлера, - это создать кватернион из двух векторов, как описано в статье "Самая короткая дуга кватерниона » Стэн Мелакс в "Игровое программирование Gems », используя эту технику:
template
inline QuaternionT QuaternionT::CreateFromVectors(const Vector3& v0, const Vector3& v1)
{
Vector3 c = v0.Cross(v1);
T d = v0.Dot(v1);
T s = std::sqrt((1 + d) * 2);
QuaternionT q;
q.x = c.x / s;
q.y = c.y / s;
q.z = c.z / s;
q.w = s / 2.0f;
return q;
}
Это метод, указанный в связанном комментарии?