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