Opengl 魔方四元数旋转在同时旋转时产生错误

Opengl 魔方四元数旋转在同时旋转时产生错误,opengl,Opengl,我想用四元数在一个特定的轴上旋转,不管立方体的位置如何,但是当我沿着x轴旋转90度,然后尝试沿着y轴旋转,而不是在y轴旋转,它在z轴旋转,你知道如何解决这个问题吗?我的代码如下: quaternion permquat; permquat.x = 0; permquat.y = 0; permquat.z = 0; permquat.w = 1; quaternion permquat2; permquat2.x = 0; permquat2.y

我想用四元数在一个特定的轴上旋转,不管立方体的位置如何,但是当我沿着x轴旋转90度,然后尝试沿着y轴旋转,而不是在y轴旋转,它在z轴旋转,你知道如何解决这个问题吗?我的代码如下:

   quaternion permquat;
   permquat.x = 0;
   permquat.y = 0;
   permquat.z = 0;
   permquat.w = 1;
   quaternion permquat2;
   permquat2.x = 0;
   permquat2.y = 0;
   permquat2.z = 0;
   permquat2.w = 1;

   quaternion local_rotation;
   local_rotation.w  = cosf( beta/(2.0*180.0));
   local_rotation.x = 1.0 * sinf( beta/(2.0*180.0) );
   local_rotation.y = 0.0 * sinf( beta/(2.0*180.0) );
   local_rotation.z = 0.0 * sinf( beta/(2.0*180.0) );

   quaternion local_rotation2;
   local_rotation2.w  = cosf( gamma/(2.0*180.0));
   local_rotation2.x = 0.0 * sinf( gamma/(2.0*180.0));
   local_rotation2.y = 1.0 * sinf( gamma/(2.0*180.0));
   local_rotation2.z = 0.0 * sinf( gamma/(2.0*180.0));

   permquat = mult(local_rotation, permquat);
   normalize(permquat);
   permquat2 = mult(local_rotation2, permquat2);
   normalize(permquat);
   matTransl3D = matrix(permquat);
   glMultMatrixf(*matTransl3D);  

   matTransl3D = matrix(permquat2);
   glMultMatrixf(*matTransl3D);  
   glTranslatef(-9, -9, -9);   // bottom left
   drawcube();
   glPopMatrix();

每按一次键,Beta和Gamma都会增加2。

请解释为什么我不应该将此问题标记为a(就像上次一样)?你和那个问题的提问者都在问关于使用四元数作为欧拉角的问题,好像四元数是一种神奇的药膏,可以解决你所有的方向问题。你们两个都想用同样的方式使用四元数,所以我看不出这个问题的答案与你的答案有什么不同。所以我读了你的答案,我想知道我做错了什么(非常抱歉重复)但我不明白的是,如何更新方向,因为我使用的opengl库只提供了glMultMatrixf的功能,如果我不单独乘以四元数,并使用glMultMatrix命令来实现正确的乘法,就没有办法使用它。如果我只是重复这些问题,我再次表示歉意,但任何帮助都将不胜感激。此外,我一直在基于@Nicolas编写代码。如果您在评论中有任何关于查询的信息,请告诉我。谢谢