拖动平移代码:
@Override
public boolean onTouchEvent(MotionEvent me) {
//处理手指滑动事件,我这里的处理是判断手指在横向和竖向滑动的距离
//这个距离隐射到球体上经度和纬度的距离,根据这个距离计算三维空间的两个
//夹角,根据这个夹角调整摄像机所在位置
if (me.getAction() == MotionEvent.ACTION_DOWN) {
startRawX = me.getRawX();
startRawY = me.getRawY();
} else if (me.getAction() == MotionEvent.ACTION_MOVE) {
float distanceX = startRawX - me.getRawX();
float distanceY = startRawY - me.getRawY();
//这里的0.1f是为了不上摄像机移动的过快
distanceY = 0.1f * (distanceY) / getWindowManager().getDefaultDisplay().getHeight();
yFlingAngleTemp = distanceY * 180 / (Math.PI * 3);
if (yFlingAngleTemp + yFlingAngle > Math.PI / 2) {
yFlingAngleTemp = Math.PI / 2 - yFlingAngle;
}
if (yFlingAngleTemp + yFlingAngle < -Math.PI / 2) {
yFlingAngleTemp = -Math.PI / 2 - yFlingAngle;
}
//这里的0.1f是为了不上摄像机移动的过快
distanceX = 0.1f * (-distanceX) / getWindowManager().getDefaultDisplay().getWidth();
xFlingAngleTemp = distanceX * 180 / (Math.PI * 3);
mAngleX = (float) (Math.cos(yFlingAngle + yFlingAngleTemp) * Math.sin(xFlingAngle + xFlingAngleTemp));
mAngleY = -(float) (Math.sin(yFlingAngle + yFlingAngleTemp));
mAngleZ = (float) (Math.cos(yFlingAngle + yFlingAngleTemp) * Math.cos(xFlingAngle + xFlingAngleTemp));
glSurfaceView.requestRender();
} else if (me.getAction() == MotionEvent.ACTION_UP) {
xFlingAngle += xFlingAngleTemp;
yFlingAngle += yFlingAngleTemp;
}
return true;
}