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