Java3D旋转失败

时间:2019-01-07 21:25:09

标签: java java-3d

我开发了一个程序来制作Rubiks Cube 2x2x2的模拟器。 现在我必须开发旋转方式,它可以一个接一个地工作。

但是当我连续旋转2圈时,就会出现问题。

public void rotate() { 
    Matrix3d oldRot = new Matrix3d();
    Vector3d oldPos = new Vector3d();

    Transform3D tr = new Transform3D();
    getTransform(tr);
    tr.get(oldRot, oldPos);

    matPos.transform(oldPos);

    System.out.println("oldRot : ");
    System.out.println(oldRot);

    oldRot.mul(matRot);
    setTransform(new Transform3D(oldRot, oldPos, 1));
}

public void setupRotation(char charAxis, double angle, double totalAngle) {
    matPos = null;
    matRot = null;
    Vector3d currentAxis = new Vector3d();
    if (charAxis == 'y') {
        double sin = Math.sin(angle);
        double cos = Math.cos(angle);
        matPos = new Matrix3d(cos, 0, -sin, 0, 1, 0, sin, 0, cos);
        currentAxis = ay;
    } else if (charAxis == 'x') {
        double sin = Math.sin(-angle);
        double cos = Math.cos(-angle);
        matPos = new Matrix3d(1, 0, 0, 0, cos, -sin, 0, sin, cos);
        currentAxis = ax;
    } else if (charAxis == 'z') {
        double sin = Math.sin(-angle);
        double cos = Math.cos(-angle);
        matPos = new Matrix3d(cos, -sin, 0, sin, cos, 0, 0, 0, 1);
        currentAxis = az;
    }

    AxisAngle4d axis = new AxisAngle4d(currentAxis.x, currentAxis.y,currentAxis.z, -angle);
    Transform3D rot = new Transform3D();

    rot.setRotation(axis);

    matRot = new Matrix3d();
    rot.get(matRot);
}

结果必须是一起旋转4个正方形

实际上,如果我旋转左侧,然后再旋转顶部,则4个正方形中的2个将一起旋转,而左侧之前的其他2个似乎在2轴上旋转

0 个答案:

没有答案