传送门☞Android兵器谱☞转载请注明☞http://blog.csdn.net/leverage_1229
传送门☞系统架构设计☞转载请注明☞http://blog.csdn.net/leverage_1229
传送门☞GoF23种设计模式☞转载请注明☞http://blog.csdn.net/leverage_1229
使物体依据程序的设定而移动,比如旋转三角形,这对于吸引用户的眼球是极其有效的。你想让OpenGL ES图形与用户交互吗?使用OpenGL ES应用响应触摸的关键是扩展你的GLSurfaceView代码,覆写其onTouchEvent()方法来监听触摸事件。
这一节将向你展示如何监听用户的触摸事件,让用户旋转一个OpenGL ES对象。
一、设置一个触摸监听器
为了使你的OpenGL ES应用能够响应触摸事件,必须在你的GLSurfaceView类中覆写onTouchEvent()方法。下面的示例演示了如何监听MotionEvent.ACTION_MOVE事件和将其转换为一个形状的旋转角度。
@Override
public boolean onTouchEvent(MotionEvent e) {
// MotionEvent携带从触摸屏幕而来的输入细节以及其它输入控制。
// 此处,你只需要关注触摸位置的改变即可。
float x = e.getX();
float y = e.getY();
switch (e.getAction()) {
case MotionEvent.ACTION_MOVE:
float dx = x - mPreviousX;
float dy = y - mPreviousY;
// 反向旋转中线以上
if (y > getHeight() / 2) {
dx = dx * -1 ;
}
// 反向旋转至左中线
if (x < getWidth() / 2) {
dy = dy * -1 ;
}
mRenderer.mAngle += (dx + dy) * TOUCH_SCALE_FACTOR; // = 180.0f / 320
requestRender();
}
mPreviousX = x;
mPreviousY = y;
return true;
}
请注意,在计算完旋转角度之后,该方法调用requestRender()来告诉renderer需要渲染帧了。这种做法很高效,因为在没有发生旋转时不需要重画帧。然而,在没有使用setRenderMode()方法将渲染模式设置为仅当数据发生改变才重绘之前,是无法达到高效的。所以应该确保解除在上一节中对该行代码的弃用:
public MyGLSurfaceView(Context context) {
...
// 仅当绘制数据发生变化时渲染视图
setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
}
二、对外暴露旋转角度
上面的示例代码需要你向程序中的其它类暴露旋转角度,所以应该为你的renderer添加一个public类型成员变量。由于renderer的代码是运行在主界面之外的其他线程中,因此必须声明这个变量为volatile。参照下面的代码:
public class MyGLRenderer implements GLSurfaceView.Renderer {
...
public volatile float mAngle;
}
三、应用旋转
想要绘制对象响应触摸事件而产生旋转,应该注释掉生成旋转角度的代码并添加mAngle,它标识触摸所生成的角度:
public void onDrawFrame(GL10 gl) {
...
// 为三角形创建一个旋转
// long time = SystemClock.uptimeMillis() % 4000L;
// float angle = 0.090f * ((int) time);
Matrix.setRotateM(mRotationMatrix, 0, mAngle, 0, 0, -1.0f);
// 合并旋转矩阵到投影和相机视图矩阵
Matrix.multiplyMM(mMVPMatrix, 0, mRotationMatrix, 0, mMVPMatrix, 0);
// 绘制三角形
mTriangle.draw(mMVPMatrix);
}
当你完成了上述步骤,运行程序,在屏幕上划动手指旋转三角形,看起来应该像下面这样:
四、示例源码
点我下载源码或访问:http://developer.android.com/training/graphics/opengl/index.html
分享到:
相关推荐
Android 3D游戏开发技术宝典 OpenGL ES2.0学习。
作者: (美) 马鲁基-弗伊诺(Marucchi-Foino, R.) 著 ...原作名: Game and Graphics Programming for iOS and Android with OpenGL ES 2.0 译者: 王净 译. 出版年: 2014-2 页数: 288 装帧: 平装 ISBN: 9787302352303
Android平台采集Camera的YUV原始数据后使用OpenGLES2.0显示,内置YV12格式的YUV分量分离。 附件为完整例子,感谢“李狗蛋52635”提供的GLProgram类。
android openGl es2.0以画线的模式画成一个矩形 只有4条边中间透明
在android 环境下实现用opengl es 2.0画立方体 并且实现手动触摸旋转 完整代码
Android OpenGL ES 2.0 开发教程 从入门到精通和Demo(内容详细、简单,易学)
本规范是本人根据《OpenGL ES Profile Specification 2.0.24 (Difference Specification) (April 1, 2009) (Annotated)》进行学习时翻译的,我今天把它提取出来,仅供大家学习使用,帮助想学习OpenGL ES 2.0这一国内...
android openGL ES 2.0画等边三角形,正方形
android opengles2.0水波纹效果,
使用的例子,讨论各种优化技术,读完本书希望能你能懂的 OpenGL ES 2.0 的核心 API,能够 开发 OpenGL ES 2.0 的应用程序,不要担心技术细节,懂得怎么去工作。 OpenGL ES 2.0 包含两部分:OpenGL ES 2.0 API 说明和 ...
android openGL es2.0简单图形绘制 简单绘制三角形 里面注释很详细
《OpenGL ES 2.0 编程指南 中文版》
同时为了便于读者的学习,《Android 3D游戏开发技术宝典:OpenGL ES 2.0》附赠的光盘中包含了书中所有案例的完整源代码,同时给出了最后3个完整大型3D游戏案例的讲解视频,最大限度地帮助读者快速掌握相应的开发技术...
OpenGL ES 2.0 编程指南 中文版, 留个备份,好东西。
如题,Android 3D游戏开发技术宝典:OpenGL ES 2.0书中的全部源代码。该书由浅入深的讲解了OpenGL ES 2.0在3D游戏开发中的各个方面,还给出了BN赛艇、火力篮球、夜鹰行动三个经典游戏的全部源代码。
这儿是有关OpenGL ES 2.0的编程指南,是中文版哦!欢迎下载
OpenGL ES 2.0编程的入门基础书籍。适合初学者。
opengl es 2.0 API 网上没提供下载...俺提供! opengl es 2.0全面抛弃了 固定渲染管线.只能说shader的时代越来越近了..先下手为强 哈哈.反正nehe已经老黄历了.shader当道.感觉图形学门槛高了一大截.无论怎么说对很多...
android openGL ES 2.0画图