【发布时间】:2012-09-10 19:54:18
【问题描述】:
我一定对 GLKit 对四元数和旋转矩阵的处理有误解。在下面的 sn-p 中,我希望矩阵 a 和 b 以相同的内容结束(可能会出现浮点错误)...
GLKQuaternion q = GLKQuaternionMakeWithAngleAndAxis(M_PI / 2, 1, 1, 1);
GLKMatrix3 a = GLKMatrix3MakeWithQuaternion(q);
GLKMatrix3 b = GLKMatrix3MakeRotation(M_PI / 2, 1, 1, 1);
但是,他们不同意。差远了。按列主要顺序,数组包含...
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 旨在将四元数表示转换为矩阵表示。
那么,为什么那些人不同意呢?我需要在创建四元数之前对轴进行归一化吗?事实上,这似乎可以解决问题,但我不相信它是这样记录的。
【问题讨论】:
标签: matrix rotation quaternions glkit