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