如何使四元数中任意轴上的旋转无效?

时间:2017-04-24 19:20:33

标签: javascript 3d webgl quaternions

我试图禁止围绕y轴的旋转,如360视频中所示:移动设备上的https://www.omnivirt.com/。如果您在移动设备上查看并左右倾斜手机,只能操作此处所示的y值(像时钟一样旋转):

该轴没有旋转。然而,在我的实现中,我采用该伽马值并将其用于绕y轴旋转。我相信我需要禁止围绕y轴旋转,但仍然在计算其他旋转时使用伽玛以实现类似的效果。我有创建设备四元数的逻辑:

//Degrees to Radians conversion
    var degtorad = Math.PI / 180;
    var z = this.alpha * degtorad / 2;
    var x = this.beta * degtorad / 2;
    var y = this.gamma * degtorad / 2;

    var cX = Math.cos(x);
    var cY = Math.cos(y);
    var cZ = Math.cos(z);
    var sX = Math.sin(x);
    var sY = Math.sin(y);
    var sZ = Math.sin(z);

    // ZXY quaternion construction.
    var w = cX * cY * cZ - sX * sY * sZ;
    var x = sX * cY * cZ - cX * sY * sZ;
    var y = cX * sY * cZ + sX * cY * sZ;
    var z = cX * cY * sZ + sX * sY * cZ;

    var deviceQuaternion = quat.fromValues(x, y, z, w);    

在这个页面上{https://math.stackexchange.com/questions/345145/nullify-zero-out-cancel-rotation-in-an-arbitrary-axis-in-a-quaternion)我找到了数学解决方案,但我不确定如何实现它们。

我正在寻找一种方法来修改我的javascript代码以实现此效果。谢谢!

0 个答案:

没有答案