Visuell korrekte Drehung mit OpenGl und Touchscreen-Funktionen

Ich habe versucht, Cube of Rubik für Android zu tun. Ich habe eine Frage zu Rotationen. Ich möchte eine Figur visuell korrekt drehen. Dies bedeutet, wenn der Benutzer den Touchscreen berührt und nach dem Bewegen des Fingers nach rechts eine Figur von der Seite des Beobachtungspunkts nach rechts dreht. Aber wenn ich ein paar Umdrehungen mache, bewegt sich die Figur nicht in die richtige Richtung. Ich verstehe, dass es auf dieser Achse ankommt, ihre Situation zu ändern. Ich habe versucht, die inverse Modellmatrix zu verwenden, um die erforderlichen Koordinaten zu erhalten, aber ich habe noch kein Ergebnis erzielt. Kann mir jemand ein Beispiel oder einen Link für die visuell korrekte Drehung der 3D-Figur mit Hilfe der Maus oder des Touchscreens geben?

   //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;
        }

Antworten auf die Frage(2)

Ihre Antwort auf die Frage