GLM - 四元数和旋转

GLM - Quaternions and Rotation

我正在尝试使用四元数来旋转程序中的对象。

但他们的问题是应用...轮换。 我正在尝试以这种方式旋转矩阵:

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

使用随机数,结果是一个巨大的缩放 (why) 和一点旋转。

另外假设我们有:

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) ,但我宁愿使用四元数

为了使四元数表示纯旋转,它必须是单位四元数。随机数一般没有这个属性。您可能希望在生成四元数之前对它们进行归一化:

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)