旋转矩阵的问题

时间:2017-03-04 09:42:57

标签: opengl matrix rotation quaternions

我目前正致力于物理引擎和渲染引擎之间的中介。我的物理引擎接受一系列力和位置并返回四元数。

我目前正在使用上一个问题的答案将该四元数转换为旋转矩阵(工作正常)。我的坐标系统是z - 进入屏幕,y - up,x - right。

现在经过所有的阐述,我一直在通过旋转单轴进行测试。我可以绕y轴和z轴旋转,没有任何问题。但是,当我试图围绕z轴旋转时,系统产生了奇怪的结果。旋转很好,但是当它旋转时,物体在z方向上变平(即:负刻度),然后旋转"并恢复到全面。它每隔90度,与基本方向偏移45度。

这是我将四元数转换为旋转矩阵的代码:

    Matrix4f output = new Matrix4f();
    output.setIdentity();

    if(input.length()!=0){
    input.normalise();
    }

    float xx = input.x * input.x;
    float xy = input.x * input.y;
    float xz = input.x * input.z;
    float xw = input.x * input.w;

    float yy = input.y * input.y ;
    float yz = input.y * input.z;
    float yw = input.y * input.w;

    float zz = input.z * input.z;
    float zw = input.z * input.w;


    output.m00 = 1 -2*((yy+zz));
    output.m01 = 2*(xy+zw);
    output.m02 = 2*(xz-yw);

    output.m10 = 2*(xy-zw);
    output.m11 = 1 - (2*(xx+zz));
    output.m12 = 2*(yz+xw);

    output.m20 = 2*(xz+yw);
    output.m21 = 2*(yz+xw);
    output.m22 = 1-(2*(xx+yy));

现在我在对象旋转时实时查看,我看不到任何不应该存在的东西。而且,这个方程直接传递给opengl,所以我真的无法解决这个问题。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

output.m21 = 2*(yz+xw);应为output.m21 = 2*(yz-xw);