我想在我玩的游戏中将我的汽车向左旋转90度。
当我使用以下代码:
glm::quat rot(info.Rotation.w,info.Rotation.x,info.Rotation.y,info.Rotation.z);
glm::quat done(glm::rotate(rot,glm::eulerAngles(rot)+glm::vec3(90.0f,0.0,0.0)));
info.Rotation.x = done.x;
info.Rotation.y = done.y;
info.Rotation.z = done.z;
info.Rotation.w = done.w;
汽车发生了奇怪的旋转。
然而,以下代码根本不会改变汽车的旋转(正如我所预期的那样,只是为了确保GLM与游戏中的四元数兼容):
glm::quat rot(info.Rotation.w,info.Rotation.x,info.Rotation.y,info.Rotation.z);
glm::quat done(rot);
info.Rotation.x = done.x;
info.Rotation.y = done.y;
info.Rotation.z = done.z;
info.Rotation.w = done.w;
每当我尝试这样做以检查是否通过它更改了旋转:
glm::quat rot(info.Rotation.w,info.Rotation.x,info.Rotation.y,info.Rotation.z);
glm::quat done(glm::rotate(rot,vec3(0.0,0.0,0.0)));
info.Rotation.x = done.x;
info.Rotation.y = done.y;
info.Rotation.z = done.z;
info.Rotation.w = done.w;
汽车在游戏中的旋转只设置为0,0,0,0。我原本以为使用这段代码后,汽车的旋转角度不会改变,因为我预期以下代码能将汽车向左旋转90度:
glm::quat rot(info.Rotation.w,info.Rotation.x,info.Rotation.y,info.Rotation.z);
glm::quat done(glm::rotate(rot,vec3(90.0,0.0,0.0)));
info.Rotation.x = done.x;
info.Rotation.y = done.y;
info.Rotation.z = done.z;
info.Rotation.w = done.w;
但是它并不能按照我想要的方式工作。它只是设置旋转,而不是将其添加到“rot”中。
我做错了什么?