Matrix GLKit四元数代码与矩阵代码不一致?

Matrix GLKit四元数代码与矩阵代码不一致?,matrix,rotation,quaternions,glkit,Matrix,Rotation,Quaternions,Glkit,我一定是误解了GLKit对四元数和旋转矩阵的处理。在下面的代码片段中,我希望矩阵a和b最终具有相同的内容(可能出现浮点错误) 然而,他们并不同意。甚至不接近。在列的主要顺序中,数组包含 a.m[0]=0.000000 b.m[0]=0.333333 a.m[1]=1.000000 b.m[1]=0.910684 a.m[2]=0.000000 b.m[2]=-0.244017 a.m[3]=0.000000 b.m[3]=-0.244017 a.m[4]=0.000000 b.m[4]=0.33

我一定是误解了GLKit对四元数和旋转矩阵的处理。在下面的代码片段中,我希望矩阵a和b最终具有相同的内容(可能出现浮点错误)

然而,他们并不同意。甚至不接近。在列的主要顺序中,数组包含

a.m[0]=0.000000 b.m[0]=0.333333
a.m[1]=1.000000 b.m[1]=0.910684
a.m[2]=0.000000 b.m[2]=-0.244017
a.m[3]=0.000000 b.m[3]=-0.244017
a.m[4]=0.000000 b.m[4]=0.333333
a.m[5]=1.000000 b.m[5]=0.910684
a.m[6]=1.000000 b.m[6]=0.910684
a.m[7]=0.000000 b.m[7]=-0.244017
a.m[8]=0.000000 b.m[8]=0.333333
我认为GLKQuaternionMakeWithAngleAndAxis和GLKMatrix3MakeRotation都使用弧度x、y、z来表示指定弧度围绕指定轴的旋转。我认为GLKMatrix3MakeWithQuaternion是为了将四元数表示转换为矩阵表示

那么,为什么这些人不同意呢?我需要在创建四元数之前规范化轴吗?事实上,这似乎解决了问题,但我不相信它是以这种方式记录的。

来自GLKQuaternion.h

/* 假设轴已规格化。 */

静态内联GLKQuaternion GLKquaternionMakefithAngleandaxis(浮动弧度、浮动x、浮动y、浮动z)

因此,是的,在创建四元数之前,确实需要规范化轴

a.m[0]=0.000000 b.m[0]=0.333333
a.m[1]=1.000000 b.m[1]=0.910684
a.m[2]=0.000000 b.m[2]=-0.244017
a.m[3]=0.000000 b.m[3]=-0.244017
a.m[4]=0.000000 b.m[4]=0.333333
a.m[5]=1.000000 b.m[5]=0.910684
a.m[6]=1.000000 b.m[6]=0.910684
a.m[7]=0.000000 b.m[7]=-0.244017
a.m[8]=0.000000 b.m[8]=0.333333