响应触摸事件
使你的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;
// reverse direction of rotation above the mid-line
if (y > getHeight() / 2) {
dx = dx * -1 ;
}
// reverse direction of rotation to left of the mid-line
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要渲染帧了。这样做是很高效的,因为在没有发生旋转时不需要重画帧。然而,在你没有要求只在数据发生改变才重画之前,还不能达到最高效,即别忘了解除这一句的注释:
public MyGLSurfaceView(Context context) {
...
// Render the view only when there is a change in the drawing data
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) {
...
// Create a rotation for the triangle
// 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);
}
当你完成了上述的几步,运行程序然后在陪同幕上拖动你的手指头,你会看到下面这样:
Figure 1.跟据触摸输入的转动的三角形(圈圈显示了触摸的位置)。
上一讲
分享到:
相关推荐
OpenGL ES 2.0编程的入门基础书籍。适合初学者。
《OpenGL ES 《OpenGL ES 2.0 编程指南 中文版》2.0 编程指南 中文版》
作者: (美) 马鲁基-弗伊诺(Marucchi-Foino, R.) 著 ...原作名: Game and Graphics Programming for iOS and Android with OpenGL ES 2.0 译者: 王净 译. 出版年: 2014-2 页数: 288 装帧: 平装 ISBN: 9787302352303
OpenGL ES 2.0应用开发实践指南-Android卷。非常实用的OpenGL ES Android游戏开发指南。
源码非常齐全,Android、iOS、BlackBerry、LinuxX11,Windows,WebGL全平台同步代码
OpenGLES2.0游戏与图形编程适用于iOS 和Android [(美)RomainMarucchi-Foino 著] 2014年版例子源码。
移动终端-游戏程序-程序设计 Ⅳ. ①TN929.53 ②TP311.5
OpenGL ES 2.0编程指南,是官方正式文档。详细讲述了OpenGL ES 2.0版本中所有API的细节和使用描述,另外还有一些简单的sample.
介绍OpenGL 在iOS Android 上 游戏和图形编程.
华章 OpenGL ES 3.0编程指南(原书第2版)由资深OpenGL技术专家亲笔撰写,全面介绍OpenGL ES 3.0的各种特性及新增功能,通过大量已经编译和测试过的实例,详细讲解OpenGL ES 3.0中的应用程序接口(API)和图形管线,...
教程名称:OpenGL ES经典教程大全课程目录:【】Android应用OpenGLES制作3D图像【技术文档】【】OpenGL ES 2.0 官方手册【】OpenGL ES 2.0 编程指南【】OpenGL ES 2.0【】OpenGL ES【】OpenGL ES教程以及COCOS 2D...
ES2.x针对可编程管线硬件.OpenGL ES1.0是以OpenGL1.3规范为基础的,OpenGL ES1.1是以OpenGL1.5为基础 的,他们分别又支持common和common lite两种profile.OpenGL ES2.0是参照OpenGL2.0规范定义的”
本资源包含有OpenGL ES 2.0 编程指南、OpenGL_ES基础入门、Beginning Android Games.2011等文档,适合学习OPENGL ES开发,希望对大家有用
OpenGL(全写Open Graphics Library)是指定义了一个跨编程语言、跨平台的编程接口规格的专业的图形程序接口。它用于三维图像(二维的亦可),是一个功能强大,调用方便的底层图形库。 OpenGL在不同的平台上有不同...
OpenGL ES的中文翻译版本 OpenGL ES 2.0 编程向导 Aaftab Munshi Dan Ginsburg Dave Shrener
第1部分: 您可以选择使用 OpenGL ES 2.0 或 3.0 构建全屏 OpenGL ES 视图。 为了节省时间,您可以使用像 Apple 的 GLKView 这样的平台级便利来构建视图,但如果您直接使用 OpenGL ES API 调用自己构建它,您将获得...
第1章 android,后起之秀 1.1 android简介 1.2 版本分裂 1.3 谷歌的角色 1.3.1 android开源项目 1.3.2 android market... 14.4 opengl es 2.0以及更多内容 14.5 框架及引擎 14.6 网络资源 14.7 结束语
随着安卓平台上软件的日渐丰富,流行的游戏种类也在变化,而更加...通过本章的学习,读者将会对 Android 平台下利用 OpenGL ES 2.0 渲染的 2D 手机游戏的开发步骤有所了解。下面就带领读者详细地了解该游戏的开发过程。