Matrix 仅重置一个旋转轴

Matrix 仅重置一个旋转轴,matrix,3d,quaternions,Matrix,3d,Quaternions,我想找到一个解决方案,将旋转表示为矩阵,然后重置其中一个组件。基本上,我希望能够将一个向量乘以这个矩阵,得到一个绕x和z轴旋转的方向,并且沿着y轴(向上)保持不变。我想让物体旋转,得到代表重力的向量,但是在物体的局部空间,不考虑偏航。所以我想重置偏航 我不想把它转换成欧拉角。我更喜欢使用四元数或直接对旋转矩阵执行一些操作序列,以避免某些角度可能出现的错误 好的,我有以下几点: btTransform t; mBody->getMotionState()->getWorldTrans

我想找到一个解决方案,将旋转表示为矩阵,然后重置其中一个组件。基本上,我希望能够将一个向量乘以这个矩阵,得到一个绕x和z轴旋转的方向,并且沿着y轴(向上)保持不变。我想让物体旋转,得到代表重力的向量,但是在物体的局部空间,不考虑偏航。所以我想重置偏航

我不想把它转换成欧拉角。我更喜欢使用四元数或直接对旋转矩阵执行一些操作序列,以避免某些角度可能出现的错误

好的,我有以下几点:

btTransform t; 
mBody->getMotionState()->getWorldTransform(t); 
btMatrix3x3 trans = t.getBasis().inverse(); 
btVector3 up = (trans * btVector3(0, 1, 0));

我意识到,如果我使用四元数,那么我会得到完全错误的结果(为什么?)。现在我得到了物体空间中的一个向量,表示世界空间中的上方向向量。但我想旋转这个向量,当模型绕Y轴旋转为零时,它表示对象空间中的全局上方向向量。所以我必须把这个向量转回来。怎么做

可以对传递的“Y”轴使用四元数摆动扭曲分解。它将四元数分解为绕Y轴旋转和绕垂直于Y轴旋转

我在这里的回答中描述了这一点。