Opengl es Android 3D 手指触控旋转object

Posted 风吹来的砂

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Opengl es Android 3D 手指触控旋转object相关的知识,希望对你有一定的参考价值。

明确原理:

先确定一下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的主要内容,如果未能解决你的问题,请参考以下文章

Android - 使用 openGL ES 绘制 3D 然后 2D

如何在Android上使用OpenGL ES 2.0绘制点

Android OpenGL ES 学习 – 坐标系统和实现3D效果

Android OpenGL ES 学习 – 坐标系统和实现3D效果

Android API Guides---OpenGL ES

我的OpenGL学习进阶之旅OpenGL ES对Android平台的支持情况