2012-02-09 16 views
1

私は3D Cubeの回転に関する問題に直面しているAndroidアプリケーションに取り組んでいます。私はキューブを指先で回転させたいと思います。Android OpenGLで指タッチでキューブのスピードを上げる方法は?

  • モバイルタッチスクリーンで高速のスピードをお持ちの場合、キューブは速く移動し、しばらくしてからゆっくりと2時間停止する必要があります。
  • ユーザーがゆっくりとタッチすると、キューブがゆっくりと移動する必要があります。ここで私が動作していないこのコードを試みたティル

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; 
xrot、yrotとzrotは値が0.3F、0.2Fと0.4であるPhotoCube3DLWPActivityクラスの静的変数である

f。私は

 @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 

答えて

1

をusing-ていますタッチイベントの

あなたは、単純な情事のジェスチャ検出を実装しようとすることができ、および速度に基づいて、あなたは、回転速度を調整することができます。 GestureDetectorを実装するには

、あなたは、次のように

Fling Gesture

を見ることができます
関連する問題