gpt4 book ai didi

c++ - GLM - 四元数和旋转

转载 作者:行者123 更新时间:2023-11-28 00:00:40 24 4
gpt4 key购买 nike

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

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

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

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

另外假设我们有:

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)

关于c++ - GLM - 四元数和旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39307107/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com