gpt4 book ai didi

c++ - 在 OpenGL 中旋转 0

转载 作者:行者123 更新时间:2023-11-30 04:30:53 25 4
gpt4 key购买 nike

我在 OpenGL 中使用四元数旋转一个对象,但我遇到了一个问题,当我从 5 度旋转到 -5 度(穿过一个单位平面)时,我看到我的模型旋转“很远”。也就是说,它从 5 到 -5 旋转了完整的 350 度,而不是整个平面的 10 度。每当我通过旋转 0 度“通过”时,围绕每个轴的旋转都会发生这种情况,但我不确定如何修复它。

我的代码如下所示,其中 roll、pitch 和 yaw 代表我的对象旋转的欧拉角:

quaternion[0] = cos(pitch/2)*cos(yaw/2)*cos(roll/2) + sin(pitch/2)*sin(yaw/2)*sin(roll/2);
quaternion[1] = sin(pitch/2)*cos(yaw/2)*cos(roll/2) - cos(pitch/2)*sin(yaw/2)*sin(roll/2);
quaternion[2] = cos(pitch/2)*sin(yaw/2)*cos(roll/2) + sin(pitch/2)*cos(yaw/2)*sin(roll/2);
quaternion[3] = cos(pitch/2)*cos(yaw/2)*sin(roll/2) - sin(pitch/2)*sin(yaw/2)*cos(roll/2);
glLoadIdentity();
glPushMatrix();
glRotatef((float) (2.0f * acos(quaternion[0]) * 180.0f / PI), quaternion[1], quaternion[2], quaternion[3]);

有什么建议吗?

最佳答案

问题不是您的四元数或 glRotate(),而是您计算旋转步距的地方。

可能您正在使用某种归一化,其中像 -5 这样的负角被“校正”为 0..359 范围内的值,因此它将变为 355 并且您的旋转然后从 5 执行到 355。

关于c++ - 在 OpenGL 中旋转 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8430426/

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