【问题标题】:GLKit quaternion code not agreeing with matrix code?GLKit四元数代码与矩阵代码不一致?
【发布时间】: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


    【解决方案1】:

    来自 GLKQuaternion.h

    /* 假设轴已经标准化。 */

    静态内联 GLKQuaternion GLKQuaternionMakeWithAngleAndAxis(float radians, float x, float y, float z);

    所以是的,您确实需要在创建四元数之前对轴进行归一化。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-17
      • 1970-01-01
      相关资源
      最近更新 更多