Вращение кватерниона не работает как исключение

В OpenGL ES 1 для Android у меня есть кубик Рубика, который состоит из 27 меньших кубов. я хочу вращения, которые приводят к тому, что конкретный маленький кубик становится точно перед точкой обзора. поэтому мне нужно два вектора. один - это вектор, который исходит из источника объекта в конкретный куб. а другой - это вектор, исходящий из точки зрения. тогда их перекрестное произведение дает мне ось вращения, а точечное произведение дает мне угол.

Я конвертирую (0,0,1) - который является вектором, который идет от начала координат до точки обзора в мировой координате - в координаты объекта. вот код:

    matrixGrabber.getCurrentModelView(gl);
    temporaryMatrix.set(matrixGrabber.mModelView);

    inputVector[0] = 0f; 
    inputVector[1] = 0f;
    inputVector[2] = 1f;
    inputVector[3] = 1f;
    Matrix.multiplyMV(resultVector, 0, temporaryMatrix.InvertMatrix(), 0, inputVector,0);
    resultVector[0]/=resultVector[3];
    resultVector[1]/=resultVector[3];
    resultVector[2]/=resultVector[3];

    inputVector = ..... // appropriate vector due to user-selection 

    axis = Vector.normalized(Vector.crossProduct(Vector.normalized(inputVector), Vector.normalized(resultVector)));
    degree = (float)Math.toDegrees(Math.acos(Vector.dot(Vector.normalized(inputVector), Vector.normalized(resultVector))));

Я использую два кватерниона для вращения. каждый раз, когда пользователь выбирает действие, должно происходить одно из этих вращений. вот код:

    Quaternion currentRotation = new Quaternion();
    Quaternion temporaryRotation = new Quaternion();
    .
    .
    .
     currentRotation = (currentRotation).mulLeft(temporaryRotation.set(axis, degree));
     currentRotation.toMatrix(matrix);
     gl.glMatrixMode(GL10.GL_MODELVIEW);
     gl.glMultMatrixf(matrix, 0);

теперь проблема в том, что он просто отлично работает для первого поворота. каким бы ни был первый поворот. это работает хорошо, но для следующих вращений кажется, что оно получает неправильную ось и градус.

Например, если система координат будет

X-right (1,0,0) Y-up (0,1,0) Z-in (0,0,1)

затем первое вращение вокруг X 90 градусов против часовой стрелки (против часовой стрелки) производит

X'-right (1,0,0) Y'-in (0,0,1) Z'-down (0,-1,0)

и второе вращение вокруг Z 90 градусов против часовой стрелки производит

X'-in (0,1,0) Y'-left (-1,0,0) Z'-down (0,-1,0)

но я ожидаю

X-up (0,1,0) Y-in (0,0,1) Z-right(1,0,0)

Я думаю, что проблема в том, что resultVector (второй вектор, который я использовал, который идет от начала координат до точки обзора) не конвертируется должным образом. Кто-нибудь знает, как я могу преобразовать мировую координату в координату объекта? Кто-нибудь знает, как мы можем определить координаты объекта, когда объект вращается?

Ответы на вопрос(2)

Ваш ответ на вопрос