GLM — кватернионы и вращение

Я пытаюсь использовать кватернионы, чтобы вращать объекты в моей программе.

Но проблема с ними заключается в применении … вращения.
Я пытаюсь повернуть матрицу таким образом:

 ModelMatrix = ModelMatrix * glm::toMat4(glm::quat(RotationW, RotationX, RotationY, RotationZ));

со случайными числами, и результатом является огромное масштабирование (Зачем) и немного вращения.

Дополнительно скажем, у нас есть:

quat3 = quat2 * quat1
Model1 = Model * glm::toMat4(glm::quat( quat3.w , quat3.x, quat3.y, quat3.z);

Model2 = Model * glm::toMat4(glm::quat( quat1.w , quat1.x, quat1.y, quat1.z);
Model2 = Model2 * glm::toMat4(glm::quat( quat2.w , quat2.x, quat2.y, quat2.z);

Model2 и Model1 имеют одинаковое вращение?

Я знаю о glm :: rotate (Model, RotationAngle, RotationAxis), но я бы лучше использовал кватернионы

0

Решение

Чтобы кватернион представлял собой чистое вращение, он должен быть единичным кватернионом. Случайные числа обычно не имеют этого свойства. Вы можете нормализовать их перед генерацией кватерниона:

l = sqrt(RotationW * RotationW + RotationX * RotationX
+ RotationY * RotationY + RotationZ * RotationZ);
RotationW /= l;
RotationX /= l;
...

Конечно, нет смысла использовать кватернионы только для преобразования их в матрицу. Прямой расчет матрицы будет более эффективным.

Для продукта кватерниона он у вас в неправильном порядке:

q3 = q2 * q1
=> M * mat(q3) = M * mat(q2) * mat(q1)
3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector