OpenGL,GLM四元数旋转

我正在更新一个旧的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;

但是这会导致物体绕其中一个边缘旋转,而不是中心。

我想知道如何应用四元数来旋转周围任何点的对象作为参数例如。

我对矩阵没有经验,因为我避免了它们,因为我之前可以使用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

我读过这些,我不知道这些值是什么。 轴是一个单位矢量...什么? fAngle我认为这是我想旋转的角度,但由于Quaternions使用任意轴,我如何获得每个XYZ轴的值,以及如何在四元数中指定它?

所以,我正在寻找一个四元数的实例/教程,所以我可以理解发生了什么。

当我想旋转一个对象时,唯一的信息是我想要旋转的轴(x,y或z,不是所有的轴,但是它们是最终结果中的组合)以及以度为单位的值。 我不是一个数学人物,所以任何不使用快捷方式的教程都会受到高度赞赏。


好吧,假设你有一个ML模型(一组模型的点)和一个点P来旋转ML

所有的旋转都指向原点,因此您需要移动以点P为原点的点集ML ,旋转所有点并将其移回。

如何做到这一点?,简单地说,对于ML(k)每一点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

作为四元数,可以用q-q替换矩阵mult

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

这应该工作。

链接地址: http://www.djcxy.com/p/81761.html

上一篇: OpenGL, GLM Quaternion Rotations

下一篇: Camera Orbiting a Point with Quaternions