Android游戏开发底层起步(一)

本文介绍了Android游戏开发的基础,重点讲解了OpenGL的应用及其与Java的结合方式。通过了解OpenGL的不同版本及其实现方法,读者可以掌握如何在Android平台上构建高效的游戏图形渲染框架。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android游戏开发的特点有二:

一是基于Java语言,二是基于OpenGL

因此要精通Android开发的底层技术,不得不从此两方面入手。


本系列文章,分析用的代码来自于LGame-0.3.1版本,在此感谢其作者为我们提供学习用源码!


OpenGL能给我们的游戏带来优异的性能。但是OpenGL只是一个优秀的图形编程标准,为我们提供了发挥图形硬件性能的借口,但是它并没有提供创建窗口的方法。我们一切的绘图的操作都需要一个窗口(包括全屏模式),没有窗口我们什么都做不了。


幸运地是,出现了GLUT (OpenGL Utility Toolkit)(OpenGL工具包)。它被用来轻松应对窗口、按钮以及用户事件。我们可以使用C/C++去调用它,但是对于想要使用真正面向对象语言的JAVA程序员来说,或者是Android程序员来说。Java与OpenGL的绑定是必须的。


虽然Android提供了OpenGL的支持,但是在模拟器上调试OpenGL程序是非常痛苦的。所以我建议想深入了解Android游戏开发的朋友,最好还是先从桌面端的JAVA+OpenGL入手。

桌面端的JAVA程序玩的很熟了,Android上的程序也就只是“照猫画虎”了。特别是对于那些没有Android真机的朋友。


有许多用Java去结合OpenGL的尝试,但是第一个被大家认可并注意的是Java对于OpenGl的绑定(Java Bindings for OpenGL), 或者称为JOGL。理由是它得到Sun(Java的创建者)和SGI(OpenGL的创建者)的支持。


OpenGL 的发展历程
  1992年7月 发布了 OpenGL 1.0 版本,并与微软共同推出 Windows NT 版本的 OpenGL
  1995年 OpenGL 1.1 版本面市,加入了新功能,并引入了纹理特性等等。
  一直到 2009年8月Khronos小组发布了 OpenGL 3.2,这是一年以来 OpenGL进行的第三次重要升级。

Android 3D 引擎采用的是 OpenGL ES OpenGL ES 是一套为手持和嵌入式系统设计的3D 引擎API。

Android 系统使用 OpenGL 的标准接口来支持3D 图形功能,android 3D 图形系统也分为 java 框架和本地代码两部分。本地代码主要实现的  OpenGL 接口的库,在Java 框架层,javax.microedition.khronos.opengles java 标准的  OpenGL 包,android.opengl 包提供了  OpenGL 系统和Android GUI 系统之间的联系。

Android 支持 OpenGL 列表
1、GL
2、GL 10
3、GL 10 EXT
4、GL 11
5、GL 11 EXT
6、GL 11 ExtensionPack

任何游戏开发都是基于框架的,从现在开始我们就一步一步的学习,怎么去写一个图形渲染框架去封装OpenGL,最后再发展成为一个成熟的游戏框架。

我们必须提供一个接口,以使上层程序与具体的底层的OpenGL的具体版本实现之间解除耦合。

因此需要一个GLEx类。我们再实时判断OpenGL的版本,从而去按需实例化GLEx类。

仔细研究Android的OpenGL包,发现其提供了:                需要搞懂Java中子接口的概念。

接口   javax.microedition.khronos.opengles.GL
接口   javax.microedition.khronos.opengles.GL10           执行了GL接口
接口        javax.microedition.khronos.opengles.GL10Ext                        执行了GL接口

接口   javax.microedition.khronos.opengles.GL11                             执行了GL10接口
接口   javax.microedition.khronos.opengles.GL11Ext                        执行了GL接口
接口       javax.microedition.khronos.opengles.GL11ExtensionPack   执行了GL接口


利用如下方法,我们可以获得OpenGL的版本号:

        String renderer = g10.glGetString(GL10.GL_RENDERER).toLowerCase();
        GLEx.isPixelFlinger = renderer.indexOf("pixelflinger") != -1;
        Log.i("Android2DView", "GLES:" + renderer);

其中:
public static final int GL_RENDERER
Since: API Level 1
Constant Value: 7937 (0x00001f01)

public abstract String glGetString (int name)
如果返回的字符串里含有“pixelflinger”        则OpenGL是软件实现。



OpenGl一般是在SurfaceView上绘图。
public abstract void onSurfaceCreated (GL10 gl, EGLConfig config)
Since: API Level 3

Called when the surface is created or recreated.

Called when the rendering thread starts and whenever the EGL context is lost. The EGL context will typically be lost when the Android device awakes after going to sleep.

Since this method is called at the beginning of rendering, as well as every time the EGL context is lost, this method is a convenient place to put code to create resources that need to be created when the rendering starts, and that need to be recreated when the EGL context is lost. Textures are an example of a resource that you might want to create here.

Note that when the EGL context is lost, all OpenGL resources associated with that context will be automatically deleted. You do not need to call the corresponding "glDelete" methods such as glDeleteTextures to manually delete these lost resources.

Parameters
glthe GL interface. Use instanceof to test if the interface supports GL11 or higher interfaces.
configthe EGLConfig of the created surface. Can be used to create matching pbuffers.









本书共分两篇,第篇介绍了Android 3D游戏开发的基础知识,主要对OpenGL ES的相关内容进行了介绍。   章 名主 要 内 容   第1章 英雄还看今朝—Android简介本章介绍了市场上主流的手机平台,同时也分析了未来手机平台的发展趋势及Android平台的前景   第2章 数风流人物—当前流行游戏类型简介本章以分类的方式简要地介绍了当前流行的游戏的玩法,游戏的视觉效果,游戏的设计及《仙剑》等著名游戏的历史   第3章 不积跬步,无以至千里—游戏开发基础知识本章初步介绍了游戏开发的基础知识   第4章 千里之行,始于足下—3D开发基础知识本章介绍了3D开发中的基础知识,包括OpenGL ES的介绍及OpenGL ES中绘制模型的原理,并通过点、线和三角形的绘制介绍了OpenGL ES中模型的几种绘制方式。最后介绍了3D场景中常用的两种投影方式,并通过例子比较了这两种投影的区别   第5章 愿君多采撷,此物最相思—光照效果的开发本章介绍了光照的基础知识,包括环境光、散射光及镜面光   第6章 为伊消得人憔悴——纹理映射本章主要介绍了纹理的基础知识,以及纹理的不同拉伸方式和纹理过滤高级技术,从绘制三角形开始到绘制地月系,可能会经历很长时间,但是这对以后的学习是有帮助的   第7章 海阔凭鱼跃,天高任鸟飞—3D基本形状的构建在本章中介绍了圆柱体、圆锥体、圆环、抛物面、双曲面和螺旋面在OpenGL ES中的渲染方法。这些基本形状在3D世界中应用广泛,在构造些复杂物体时,经常会运用这些基本形状来进行拼装组合   第8章 执子之手,与子偕老—坐标变换本章介绍了坐标变换的应用。绘制3D场景的过程,主要是旋转和平移操作的组合,通过合理的堆栈操作,就比较容易绘制出所需的3D场景   第9章 孤帆远影碧空尽—摄像机与雾特效在本章中,首先对摄像机及其配置做了介绍。摄像机在3D编程中至关重要,没有正确的配置,摄像机可能不能获得想要的场景效果。然后对雾特效做了具体介绍,应用雾特效可以使场景更加逼真,并且可以减少场景渲染量来提高性能   第10章 假作真时真亦假—混合本章主要为读者介绍了混合,从混合的背景知识到如何配置源因子和目标因子。在介绍源因子和目标因子的时候,向读者介绍了些预定义常量和些常用的组合方式,以及如何启用混合   第11章 蓦然回首,那人却在灯火阑珊处—3D高级技术本章主要为读者介绍了3D的部分高级技术。每项技术通过讲解其原理和案例,使读者对3D高级技术有定的了解   第12章 心有灵犀点通—传感器在本章中,向读者介绍了Android中传感器的相关知识。包括传感器的种类、配置,并且着重介绍了姿态传感器的应用   第13章 千锤万凿出深山—游戏中的数学与物理在本章中对3D游戏中可能会用到的数学及物理知识进行了简单的介绍,这在3D游戏开发中是相当重要的。游戏中的核心算法,基本上都要用到数学和物理知识。游戏的性能很大程度上取决于游戏设计的算法   第14章 山舞银蛇,原驰蜡象—AI基本理念本章主要介绍了AI、AI引擎的基本组成与设计,以及游戏AI中图的搜索和模糊逻辑,其中游戏AI中图的搜索为本章的重点。在本章中详细介绍了5种算法的原理与实现   第15章 独上高楼,望尽天涯路—开发小秘籍本章介绍了地图设计器、多键技术、虚拟键盘、查找表技术、状态机、AABB边界框、穿透效应、拾取技术,以及天空盒和天空穹在OpenGL ES中的应用 第二篇以7个比较大的案例来说明Android平台下3D游戏的开发流程,通过这7个案例的讲解,读者对3D游戏的开发将会有更深层次的理解。   章 名主 要 内 容   第16章 体育类游戏——《疯狂投篮》本章介绍了Android 3D游戏《疯狂投篮》的开发。通过该案例向读者介绍了在Android平台下进行3D游戏开发的相关知识和基本流程,并对游戏开发中的编程技巧进行了介绍,并主要介绍了篮球与地面、墙面及篮框的碰撞检测及运动动画的实现方法   第17章 益智类游戏——《旋转积木》本章介绍了Android 3D游戏《旋转积木》的开发。主要介绍了积木旋转的不同状态的实现方法和地图设计器的应用   第18章 休闲类游戏——《摩天大楼》本章介绍了Android 3D游戏《摩天大楼》的开发。主要介绍了楼层与楼层之间的衔接与碰撞及掉落后翻转动画的实现   第19章 动作类游戏——《3D空战》本章介绍了Android 3D游戏《3D空战》的开发。主要介绍了飞机的构造方法和我方战机与敌方战机的操控及动画实现   第20章 桌面类游戏——《激情台球》本章介绍了Android 3D游戏《激情台球》的开发。主要介绍了台球与台球的碰撞检测实现、台球与球桌的碰撞检测实现和进球的判定实现   第21章 射击类游戏——《抢滩登陆》本章介绍了Android 3D游戏《抢滩登陆》的开发。主要运用了灰度图生成技术并且主要介绍了坦克运动的实现方法及炮弹碰撞检测的实现   第22章 竞技类游戏——《乡村飙车》本章介绍了Android 3D游戏《乡村飙车》的开发。主要介绍了运用分层绘制和拼接绘制的策略进行场景的优化绘制,并且对场景部件进行了分类控制   本书面向的读者   本书的内容详细,且几乎涵盖了Android 3D游戏开发所有相关的技术,并向读者介绍了真实项目的开发流程,主要面向以下读者。   Android的初学者   本书详细介绍了OpenGL ES的基础知识,并对Android 3D游戏程序的开发进行了介绍。作为Android的初学者,通过本书的学习可以快速全面地掌握Android 3D游戏开发的相关知识,稳健地步入Android 3D游戏开发人员的行列。   有Android基础且希望学习Android 3D游戏开发的读者   有Android基础的读者通过阅读本书的前半部分便可快速掌握OpenGL ES的基础知识,然后通过7个真实案例的学习迅速掌握Android平台下应用程序的开发。   在职的开发人员
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值