Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ OpenGL,GLM四元数旋转_C++_Opengl_Quaternions_Glm Math - Fatal编程技术网

C++ OpenGL,GLM四元数旋转

C++ OpenGL,GLM四元数旋转,c++,opengl,quaternions,glm-math,C++,Opengl,Quaternions,Glm Math,我正在更新一个旧的OpenGL项目,并且正在切换矩阵和四元数的所有(已弃用的)glMatrix()函数,而且我在旋转方面遇到了问题 我的画是这样的: //these two are supposedly working mat4 mProjection = perspective(FOV, aspectRatio, near, far); mat4 mView = lookAt(cameraPosition, cameraCenter, headsUp); mat4 mModel = mat4

我正在更新一个旧的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;
我现在要做的是围绕一个特定的点(比如对象的中心)对对象应用旋转。 我试过:

但这会导致对象围绕其一条边旋转,而不是围绕其中心旋转

例如,我想知道如何应用四元数围绕作为参数传递的任何点旋转对象

我对矩阵没有经验,因为我避免使用它们,因为我以前可以使用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轴的值,以及如何在四元数中指定它

所以,我正在寻找任何四元数的实用示例/教程,这样我就可以了解发生了什么

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

好的,假设你有一个模型
ML
(模型的点集)和一个点
p
来旋转
ML

所有旋转都指向原点,因此您需要移动点集
ML
以点
p
为原点,旋转所有点,然后将其移回

如何做到这一点?很简单,对于每个点
ML(k)
(集合中的一个点),您需要:

然后旋转:

ROT * (ML(k)-P)
最后,你把它移回去:

ROT(ML(k)-P) + P
作为四元数,将矩阵mult替换为
q
-q

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

这应该行。

这个问题有点宽泛。。。我认为你理解这个想法,只是没有正确地执行。例如,您是否注意到您正在乘以
mModel
矩阵和
mModelRotation
矩阵?我想你的意思是只乘以
mModelRotation
矩阵。除此之外,你所说的一切看起来都是对的。抱歉,如果它看起来太宽泛了,但基本上,我正在寻找四元数旋转的一个实际应用(教程或示例),让数学爱好者能够理解。四元数围绕一个轴旋转一个角度。我说得再简单不过了。应用?想象一个末端有机器人“手腕”的机械臂。根据基于四元数的绕手臂(轴)旋转(角度),旋转的手腕最容易定位。
ROT(ML(k)-P) + P
q * (ML(k)-p) * -q + p