OpenGL, GLM Quaternion Вращения

Я обновляю старый проект OpenGL и переключаю все (устарело) glMatrix () функции для матриц и кватернионов, и у меня возникают проблемы с работой вращения.

Мой рисунок выглядит так:

//these two are supposedly working
mat4 mProjection = perspective(FOV, aspectRatio, near, far);
mat4 mView = lookAt(cameraPosition, cameraCenter, headsUp);

mat4 mModel = mat4(1.0f);
mat4 mMVP = mProjection * mView * mModel;

Сейчас я пытаюсь применить вращение к объекту вокруг определенной точки (например, к центру объекта).
Я старался:

mat4 mModelRotation = rotate(mModel, object->RotationY(), vec3(0.0, 1.0, 0.0)); //RotationY being an angle in degrees
mat4 mMVP = mProjection * mView * mModel * mModelRotation;

Но это заставляет объект вращаться вокруг одного из его краев, а не его центра.

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

Я неопытный с матрицами, так как я избегал их, потому что я мог использовать glMatrix () функций, так что я не очень разбираюсь в связи между пространственным положением и ними, и попытка обновить их до кватернионов выглядит еще более сложной.

Я читал о логике кватернионов и о том, как их использовать технически, но я не понимаю, откуда взялись их ценности.

Например:

//axis is a unit vector
local_rotation.w  = cosf( fAngle/2)
local_rotation.x = axis.x * sinf( fAngle/2 )
local_rotation.y = axis.y * sinf( fAngle/2 )
local_rotation.z = axis.z * sinf( fAngle/2 )
total = local_rotation * total

Я прочитал это, и я понятия не имею, что это за значения. Ось — это единичный вектор … чего? нелепое изобретение Я предполагаю, что это угол, который я хочу повернуть, но поскольку кватернионы используют произвольную ось, как мне получить значение для каждой оси XYZ и как мне указать его в кватернионе?

Итак, я ищу любой практический пример / учебник по Quaternion, чтобы я мог понять, что происходит.

Единственная информация, которую я имею, когда хочу повернуть объект, — это ось, которую я хочу повернуть (x, y ИЛИ z, не все из них, а их комбинация в конечном результате) и значение в градусах.
Я не очень разбираюсь в математике, поэтому любой учебник, в котором не используются ярлыки, высоко ценится.

1

Решение

ОК, скажем, у вас есть модель ML (набор точек модели) и точка P повернуть это ML,

Все повороты относятся к началу координат, поэтому вам нужно переместить набор точек ML принять точку P как источник, сделайте вращение всех точек и затем переместите это назад.

Как это сделать?, Просто, для каждой точки ML(k) (точка в наборе) вы делаете:

ML(k)-P --> with this you move the points, using the P point as origin

затем поверните:

ROT * (ML(k)-P)

и, наконец, вы переместите его обратно:

ROT(ML(k)-P) + P

Как кватернионы, вы заменяете матрицу mult на q а также -q

q * (ML(k)-p) * -q + p

Это должно работать.

2

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

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

По вопросам рекламы [email protected]