2012-02-09 2 views
1

Je travaille sur une application Android dans laquelle je suis confronté à un problème de rotation du cube 3D. Je veux faire pivoter mon cube en fonction du toucher.Comment augmenter la vitesse de Cube sur le doigt touch dans Android OpenGL?

  • Si l'utilisateur touche Vitesse rapide sur l'écran du mobile, alors le cube doit se déplacer rapidement et s'arrêter lentement -2 après un certain temps.
  • Et si l'utilisateur Touchez lentement, le cube devrait se déplacer lentement.

Jusqu'à présent, je l'ai essayé ce code qui ne fonctionne pas pour rotation-

  //Rotate around the axis based on the rotation matrix (rotation, x, y, z) 
    gl.glRotatef(PhotoCube3DLWPActivity.xrot, 1.0f, 0.0f, 0.0f); //X 
    gl.glRotatef(PhotoCube3DLWPActivity.yrot, 0.0f, 1.0f, 0.0f); //Y 
    gl.glRotatef(PhotoCube3DLWPActivity.zrot, 0.0f, 0.0f, 1.0f); //Z 

    cube.draw(gl);     //Draw the Cube 

    //Change rotation factors (nice rotation) 
    PhotoCube3DLWPActivity.xrot +=0.3f;; 
    PhotoCube3DLWPActivity.yrot +=0.2f; 
    PhotoCube3DLWPActivity.zrot +=0.4f; 

où xrot, yrot et zrot sont variables statiques de classe PhotoCube3DLWPActivity dont les valeurs sont 0.3f, 0.2f et 0,4 f respectiblly.

pour l'événement tactile Je suis using-

 @Override 
    public void onTouchEvent(MotionEvent event) { 
     super.onTouchEvent(event); 
     switch (event.getAction()) { 

      case MotionEvent.ACTION_DOWN : 
       Log.i("check", "Hey action down"); 
       downX = event.getX(); 
       downY = event.getY(); 
       downTime = System.currentTimeMillis(); 
       break; 
      case MotionEvent.ACTION_MOVE : 
       // handle in between rotation 

       break; 

      case MotionEvent.ACTION_UP : 
       Log.i("check", "Hey action up"); 
       diffX = event.getX() - downX; 
       diffY = event.getY() - downY; 
       diffTime = System.currentTimeMillis() - downTime; 

       diffTouch = (float) Math.sqrt(diffX * diffX + diffY * diffY); 

       diffSpeed = diffTouch/diffTime * 1.0f; 

       diffAngle = (float) Math.atan(diffY/diffX); 

       xrot += diffSpeed * Math.sin(diffAngle); 
       yrot += diffSpeed * Math.cos(diffAngle); 

       break; 
     } 

    }//touch end 

Répondre

1

Vous pouvez essayer la mise en œuvre d'une simple détection de geste Fling, et en fonction de la vitesse, vous pouvez régler la vitesse de rotation.

Pour mettre en œuvre le GestureDetector, vous pouvez regarder dans ce qui suit,

Fling Gesture

Questions connexes