Poprawna wizualnie rotacja dzięki możliwościom OpenGl i ekranu dotykowego

Próbowałem zrobić Cube of Rubik dla Androida. Mam jedno pytanie dotyczące rotacji. Chcę obrócić figurę poprawną wizualnie. Oznacza to, że jeśli ekran dotykowy użytkownika i po przesunięciu palca w prawo, cyfra obraca się w prawo od strony punktu obserwacyjnego. Ale kiedy wykonuję kilka obrotów, figura zaczyna się poruszać w niewłaściwym kierunku. Rozumiem, że od tej osi zależy zmiana ich sytuacji. Ale starałem się użyć odwrotnej macierzy modelu, aby uzyskać potrzebne współrzędne, ale jeszcze tego nie zrobiłem. Czy ktoś mógłby mi podać przykład lub link wizualnie poprawnej rotacji figury 3D za pomocą myszy lub ekranu dotykowego?

   //get vector 3D of touch
   Vector3f touchVector = getRubikSystemCoordinates(mTouchX,mTouchY,square.rubikRotationMatrix);
   //Get vector 3D of move     
   Vector3f moveVector = getRubikSystemCoordinates(mMoveX,mMoveY,square.rubikRotationMatrix);
        //get direction of motion
        float direction = touchVector.substractFrom(moveVector); 
        //get axis for rotation
        Vector3f axis = touchVector.vectorProductTo(moveVector);
        //normalize axis
        axis.normalize();
        //get angle of rotation
        float angle = direction.length;
        //make identity Quad
        Quaternion quad = new Quaternion();
        //make rotation quad
        quad.makeRotationKvaternion(angle,axis);
        //from quad recieve matrix
        Matrix4f matrix = quad.toMatrix();
        //multiply to current modelview matrix
        gl.glMultMatrixf(matrix.returnArray(),0);
        //save rotation matrix
        square.rotationMatrix = square.rotationMatrix.multiply(matrix);
        //save modelView matrix
        square.saveModelView(square.initMatrix.returnArray()); 


      // touch coords to current modelView coords
      private Vector3f getRubikSystemCoordinates(float x, float y, Matrix4f matrix){
       // touch coords to normal coords of screen 
       Vector2f normalCoords = (new Vector2f(x,y)).toNormalScreenCoordinates(Settings.viewPort[2],Settings.viewPort[3]);
        // to sphere coords in 3D
        Vector3f sphereVector = new Vector3f(normalCoords.x,normalCoords.y, FloatMath.sqrt(2-normalCoords.x*normalCoords.x-normalCoords.y*normalCoords.y));
        //Get inverse matrix from ModelView Matrix
        Matrix4f m = matrix.inverseMatrix();
        //Get vector for current modelView 3D coords
        Vector3f vector = m.multiplyToVector(vector);
        // make normalize vector
        vector.normalize();
        return vector;
        }

questionAnswers(2)

yourAnswerToTheQuestion