四元数旋转不太正确
继我的上一个问题之后,我现在已经设法用四元数旋转我的对象,但是还有一个小问题,不知道怎么解决。使用下面的代码,我的对象围绕 x 轴和 y 轴旋转。但当我在 x 键和 y 键之间切换时,它总是跳回到初始位置。所以我从来没有从新的职位开始轮换,而总是从项目开始时的位置开始轮换。
Quaternion q1 = quaternion->quat_rotate(anglex,1,0,0);
Quaternion q2 = quaternion->quat_rotate(angley,0,1,0);
quaternion->mult(q1,q2);
quaternion->quat_matrix(Matrix);
glMultMatrixf(Matrix);
object->drawObject(Red,Green,Blue);
我希望你明白我的意思。
Following on from my previous question, I have now managed to rotate my object with quaternions but there is still a small problem and I dont know how to solve it. With the code below my object rotates round the x and y axis. But it always jumps back to the initial position when I switch between x- and y-key. So I never get a rotation from the new position, but always from the one with which the programm started.
Quaternion q1 = quaternion->quat_rotate(anglex,1,0,0);
Quaternion q2 = quaternion->quat_rotate(angley,0,1,0);
quaternion->mult(q1,q2);
quaternion->quat_matrix(Matrix);
glMultMatrixf(Matrix);
object->drawObject(Red,Green,Blue);
I hope you understand what I mean.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
当然可以。您的代码完全按照您的指示执行。您还没有向我们展示 Quaternion::mult(Quaterion&q1,Quaterion&q1) 的作用,但我怀疑它用 q1 和 q2 的乘积替换了四元数实例的内容。您需要将当前方向乘以 q1*q2 以获得新方向,而不是用 q1*q2 替换当前方向。
Of course it does. Your code is doing exactly what you are telling it to do. You haven't shown us what
Quaternion::mult(Quaterion&q1,Quaterion&q1)
does, but I suspect it replaces the contents of the quaternion instance with the product of q1 and q2. You need to multiply the current orientation by q1*q2 to get the new orientation rather than replace the current orientation with q1*q2.