標籤:case 代碼 計算 object class return trend 觸控 lex
明確原理:
先確定一下OpenGL裡面的座標為:x軸正方向為螢幕向右,y軸正方向為螢幕向上,z軸正方向為螢幕由裡向外。
當手指在X軸方向上移動時,畫面中物體應繞Y軸方向旋轉,則為gl.glRotatef(Angle,0,1,0);
當手指在Y軸方向上移動時,畫面中物體應繞X軸方向旋轉,則為gl.glRotatef(Angle,1,0,0);
除此之外,android中螢幕響應手勢移動所應用的function為:onTouchEvent.
下面展示代碼:
private final float TOUCH_SCALE_FACTOR = 180.0f / 320;
renderer = new NewRender();
public boolean onTouchEvent(MotionEvent e) { switch (e.getAction()) { case MotionEvent.ACTION_DOWN: ypos = e.getY(); xpos = e.getX(); return true; case MotionEvent.ACTION_MOVE: float dy = e.getY() - ypos;//計算觸控筆Y位移 float dx = e.getX() - xpos;//計算觸控筆X位移 renderer.center.mAngleX = dy * TOUCH_SCALE_FACTOR;//設定沿x軸旋轉角度 renderer.center.mAngleY = dx * TOUCH_SCALE_FACTOR;//設定沿y軸旋轉角度 requestRender();//重繪畫面 return true; } return true; }
NewRender()是我繼承Renderer建立的一個class.
renderer.center.mAngleX = dy * TOUCH_SCALE_FACTOR;//設定沿x軸旋轉角度 renderer.center.mAngleY = dx * TOUCH_SCALE_FACTOR;//設定沿y軸旋轉角度
center.mAngleX 和 center.mAngleY是指我的Object(center)的旋轉角度。
在center中,我的旋轉角度設定為:
gl.glRotatef(mAngleX, 1, 0, 0);//旋轉 gl.glRotatef(mAngleY, 0, 1, 0);
gl.glRotatef(mAngleZ, 0, 0, 1);
Opengl es Android 3D 手指觸控旋轉object