首页>参考读物>计算机科学与技术>软件与程序设计

OpenGL ES应用开发实践指南:Android卷
作者 : (美)Kevin Brothaler 著
译者 : 刘力平 苏统华 译
丛书名 : 移动开发
出版日期 : 2014-09-15
ISBN : 978-7-111-47782-2
定价 : 49.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 240
开本 : 16
原书名 : OpenGL ES 2 for Android
原出版社: Pragmatic Bookshelf
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

图书特色

每天几百万部设备的出货量,使Android取得了前所未有的蓬勃发展。这是你学习为Android开发三维游戏和动态壁纸的最佳时机。你会学到所有关于着色器和OpenGL管道的内容,并发现OpenGL ES 2.0的魔力,相比前一个版本,它有很多更加丰富的功能特性。如果你能用Java编程,并且愿意与他人分享你的视觉创意,这本书就是为你而写。
要在Android上创建引人注目的图形,这本书将讲解你所需要的所有知识。通过构建一个简单的空气曲棍球游戏,你会学习到OpenGL的基础内容,在这个开发过程中,你会看到如何初始化OpenGL,以及使用着色器编写图形管道。每一节都是在前一节的基础上构建的,一步步地添加颜色、着色器、三维投影、触控交互等。
然后,你会知道如何把你的想法变成可以在主屏幕上运行的动态壁纸。你将学到更多高级的特效,包括粒子、光照模型和深度缓冲区。当调试程序的时候,你会知道需要从何处下手;当把应用部署到市场上的时候,你会明白需要注意哪些问题。
对新手来说,OpenGL可能有点黑暗艺术的意味。当你阅读这本书时,你将从最基本的原理开始学习每一个新概念。你不仅仅只学会了一个功能特性;你也会理解它是如何工作的,以及为何它的工作方式是那样的。这里所介绍的技术也可应用于其他平台,比如iOS或HTML5 WebGL。

作者简介
Kevin Brothaler 移动软件开发商店Digipom的创始人,在Android开发方面有丰富的经验,并且管理着“Learn OpenGL ES”(http://www.learnopengles.com),这是一套面向Android和WebGL的在线OpenGL教程。

译者简介
刘力平 硕士,多年供职于知名国外移动终端设备企业,从事系统软件设计、开发工作,尤其在Android软件开发方面具有丰富的经验。自从Android平台发布以来,一直在从事Android系统开发方面的工作,是所在企业的Android Framework主题专家。他感兴趣的领域是Android框架设计、云计算应用、软件项目管理等。

苏统华 博士,哈尔滨工业大学软件学院硕士生导师,哈尔滨工业大学英伟达CUDA教学中心负责人。主要研究领域包括大规模并行计算、模式识别、物联网智能信息处理、智能媒体交互与计算等。他在手写汉字识别领域建立了里程碑式工作,论文他引约300次;他所建立的HIT-MW库,为全世界100多家科研院所采用;目前负责国家自然科学基金项目2项。2013年,他领导的研究组在文档分析和识别国际会议(ICDAR’2013)上获得手写汉字识别竞赛的双料冠军。2014年,他领导的研究组发布基于Android平台的手写输入法。著有英文专著《Chinese Handwriting Recognition: An Algorithmic Perspective》(德国施普林格出版社出版),出版相关译作5本(机械工业出版社出版)。


本书是一本系统的OpenGL三维游戏和动态壁纸开发指南。由资深Android开发专家根据OpenGL ES 2.0版本撰写,不仅系统地讲解了OpenGL ES的核心概念、技术,以及Android的图形机制,还通过大量案例讲解了在Android上进行OpenGL ES开发的方法和技巧。
本书分为两部分,共15章:第1章主要介绍开发环境的安装和配置,以及如何创建一个新的OpenGL项目和清空屏幕;第一部分(第2~9章)详细讲解创建一个简单的空气曲棍球游戏的触控、纹理和基本原理,包括如何成功地初始化OpenGL并将数据发送到屏幕上,如何使用基本的向量和矩阵数学创建三维世界,以及Android的许多特定细节,比如在Dalvik虚拟机和本地环境之间编码数据(marshal data)以及如何在主线程和渲染线程间安全地传送数据。第二部分(第10~15章)详细介绍如何搭建三维世界中的效果,比如光照和地形渲染,以及如何创建可以运行在Android主屏幕上的动态壁纸。此外,附录还提供了正交投影和透视投影两个OpenGL常用投影类型背后的矩阵知识,以及一些实用的应用程序调试技巧。

资深Android开发专家多年实践经验结晶,全面深入讲解OpenGL三维游戏和动态壁纸开发
系统讲解OpenGL ES的核心概念、技术,以及Android的图形机制,通过大量案例讲解了在Android上进行OpenGL ES开发的方法和技巧

图书前言

Android刚刚经历了一个难以置信的增长周期,全世界的消费者手里有超过7.5亿台设备,并且每天都有一百多万台设备被激活。和Apple一样,在每一台Android手机和平板上也有个集中的市场,称为Google Play。随着这个市场被安装到每台Android设备上,对任何一个梦想着发布自己的游戏或者壁纸的人来说,这都是个前所未有的机会。
在Android上,与Apple的iOS及许多其他移动平台一样,开发者可以使用一个跨平台应用编程接口创建二维或者三维图形,这个接口称为OpenGL;OpenGL已经用于桌面系统很长时间了,但移动平台上使用的是一个特殊的嵌入式版本,叫做OpenGL ES。第一个版本的OpenGL ES把三维带进了移动平台,它在开发者中非常流行,因为它非常简单易学,同时还包含了一个定义好的特性集合。然而,这个特性集合也很有限,它无法跟上大多数高性能智能手机和平板电脑所提供的先进的、卓越的特性。
发展到了OpenGL ES 2.0,大多数旧的API被淘汰了,取而代之的是新的可编程API,它更容易增加特殊的效果,也能利用最新的硬件所提供的优势。这些设备现在也能生成其他竞争平台几年前就实现的图形了!然而,为了利用这个能力,我们需要学习2.0引进的这些新的API。在2012年8月,Khronos工作组最终确定了下一版本的规范,即OpenGL ES 3.0,它完全兼容2.0,只是在其基础上扩展了一些先进的特性。
因此,Android上的OpenGL到底能做什么呢?我们可以创建令人惊艳的动态壁纸(live wallpaper),这些壁纸可以被数百万的用户下载;我们可以创建有竞争力的三维游戏,它们有着栩栩如生的、令人窒息的图形效果。随着硬件成本的降低,以及在线商店的大量普及,是时候开始学习了!
本书的主要内容
快速浏览一下我们将要讨论的内容:
在本书第一部分,会学习如何创建一个简单的空气曲棍球游戏,包括触控、纹理和基本原理。这个项目会教你如何成功地初始化OpenGL并将数据发送到屏幕上,以及如何使用基本的向量和矩阵数学创建三维世界。你也会学到Android的许多特定细节,比如在Dalvik虚拟机和本地环境之间编码数据(marshal data)以及如何在主线程和渲染线程间安全地传送数据。
在本书第二部分,你就可以在第一部分学习到的知识的基础上开始搭建三维世界中的效果,比如光照和地形渲染,接下来还会学习如何创建可以运行在Android主屏幕(home screen)上的动态壁纸。
本书的读者对象
如果对在Android上开发更高级的图形程序感兴趣,本书就是为你所写的。本书假定你有一些编程经验,包括Java和Android的经验。
Java
如果你以前用过其他托管语言(managed language),比如C#,转到Java就很简单了。如果你有更多关于本地语言(native language)的经验,你就要注意它们的主要区别之一,Android上的Java是运行在虚拟机上的、使用垃圾回收的语言,这既有益处也有代价。
下面这些书籍会更好地帮助你学习Java:
《The Java Programming Language》[AGH05], 作者:Ken Arnold、James Gosling和 David Holmes
《Effective Java》[Blo 08],作者:Joshua Bloch
《Thinking in Java》[Eck 06],作者:Bruce Eckel
Android
一旦你熟悉了Java,要为Android开发软件就需要一些相关的库和方法的经验了。为了覆盖所有的基本知识,我推荐阅读Ed Burnette的书籍《Hello,Android》[Bur 10]。你也可以看看Google的Android在线培训中的前两节课:
构建第一个应用
管理Activity组件的生命周期
对于本书的大部分内容,尽管使用模拟器就足够了,但手上有个Android设备会更容易些。稍后我们会给出更多细节,参见1.1节。
这些应该足够让你通读本书了。我们会从第一个基本原理开始就包括所有的基础知识,这样,你就不需要任何三维图形的编程经验了,并且我们也会在书中讲到一些数学知识,如果你过去学过三角学和线性代数,那你就准备得很充分了!如果没有,不用害怕,讲解过程中,所有的东西都会详细解释的。
如何阅读本书
每一章都是在前一章的基础上讲解的,因此,最好按顺序阅读。所有的示例代码都可以在线下载(参见下面的“在线资源”一节),这样,当你想查看某个特定章节时,就可以下载前一章的整个项目,以此作为基础开始;如果你忘了或者想要从头开始,这会有帮助。
惯例
我们会使用OpenGL代指OpenGL ES 2.0,它是移动平台和网页上的OpenGL现代的
版本。
在本书的大部分章节中,我们使用GLES20类,它是Android软件开发包(SDK)的一部分。因为大多数的OpenGL常量和方法都在这个类里定义,我一般会忽略类名,而直接提及常量或方法;我们也会在代码中使用静态导入(static import),从而忽略类名(参见1.5 节)。
在线资源
本书的所有资源都可以在网站http://pragprog.com/book/kbogla找到,包括示例代码以及相应的图像和纹理。
你可以访问Learn OpenGL ES网站,那有我维护的一个OpenGL ES教程的博客。
下面是一些很好的在线资源列表,它们由Khronos工作组维护:
OpenGL ES 2.0 API快速参考卡片
OpenGL ES 2.0 参考页
OpenGL ES 着色器语言(GLSL ES)参考页
The OpenGL ES着色器语言
OpenGL ES Common Profile Specification 版本 2.0.25(完整规范)
我推荐把参考卡片打印出来放在手边,这样就能在需要时快速参考。Android使用EGL
(一个本地平台接口)帮助你配置显示设备,你可能发现了Khronos的EGL API的注册表也很有用。
现在开始吧
如今拥有功能强大的手机和平板电脑的人比以前多了,并且市场还在持续增长。Android的软件工具使得开发者更容易为Android开发软件,并且Google的Play Store使分享应用变得更加容易。让我们向第1章前进吧。船起锚了!

上架指导

计算机\程序设计

封底文字

每天几百万部设备的出货量,使Android取得了前所未有的蓬勃发展。这是你学习为Android开发三维游戏和动态壁纸的最佳时机。你会学到所有关于着色器和OpenGL管道的内容,并发现OpenGL ES 2.0的魔力,相比前一个版本,它有很多更加丰富的功能特性。如果你能用Java编程,并且愿意与他人分享你的视觉创意,这本书就是为你而写。
  要在Android上创建引人注目的图形,这本书将教会所有你所需要的知识。通过构建一个简单的空气曲棍球游戏,你会学习到OpenGL的基础内容,在这个开发过程中,你会看到如何初始化OpenGL,以及使用着色器编写图形管道。每一课都是在前一课的基础上构建的,一步步地添加颜色、着色器、三维投影、触控交互等。
  然后,你会知道如何把你的想法变成可以在主屏幕上运行的动态壁纸。你将学到更多高级的特效,包括粒子、光照模型以及深度缓冲区。当调试程序的时候,你会知道需要从何处下手,当把应用部署到市场上的时候,你要注意哪些问题。
  对新手来说,OpenGL可能有点黑暗艺术的意味。当你阅读这本书时,你将从最基本的原理开始学习每一个新概念。你不仅仅只学会了一个功能特性;你也会理解它是如何工作的,以及为何它的工作方式是那样的。OpenGL ES 3前向兼容你所学到的一切,你甚至可以把这些技术应用于其他平台,比如iOS或HTML5 WebGL。

作者简介

(美)Kevin Brothaler 著:暂无简介

译者简介

刘力平 苏统华 译:暂无简介

推荐序

游戏是视觉体验。作为游戏开发者,我们要创造出特定的环境和角色,以使玩家能沉浸其中,这就需要使用极其逼真的三维场景或者离奇的、超出现实世界的体验。我们渴望数百万人玩我们的游戏并体验我们的世界,为他们的生活多增加一点儿乐趣。Android和它的生态系统为我们提供了观众;OpenGL ES给了我们实现那些梦想中的游戏的技术手段。
OpenGL ES是移动图形编程方面的事实标准。它是OpenGL桌面版本的精简的兄弟,为了保持向后兼容性,它去除了大量冗余的东西。OpenGL ES有三个主要的版本:版本1.0提供了一个不灵活的、固定功能的管道;版本2.0推出了一个可编程的管道,这个管道可以提供我们需要的所有功能;最终,诞生了非常年轻、还没有广泛使用的版本3.0,它在2.0标准的基础上添加了新的特性。
虽然OpenGL ES几乎被使用10年了,但方便初学者查阅的材料还很难找到,尤其是版本2.0,它推出了一个对新人来说很深奥的主题——着色器。除了设备和平台相关的问题,材料的缺乏设置了相当高的准入门槛。
基于这些原因Kevin写作了本书。他削减了所有的陈词滥调,带你浏览了OpenGL ES 2.0的实务。Kevin不仅囊括了支持三维图形的基本的概念,而且记录了你可能遇到的所有特定于Android的陷阱;有经验的开发人员在这也能找到几块金子。换句话说:“独自上路很危险,带上这本书吧!”。

Mario Zechner

图书目录

推荐序
致 谢
前 言
第1章 准备开始 1
1.1 安装工具 1
1.2 创建第一个程序 3
1.3 初始化OpenGL 5
1.4 创建Renderer类 10
1.5 使用静态导入 12
1.6 小结 12
第一部分 一个简单的空气曲棍球游戏
第2章 定义顶点和着色器 14
2.1 为什么选择空气曲棍球 14
2.2 不要从头开始 15
2.3 定义空气曲棍球桌子的结构 16
2.4 使数据可以被OpenGL存取 18
2.5 引入OpenGL管道 20
2.6 OpenGL颜色模型 25
2.7 小结 26
第3章 编译着色器及在屏幕上绘图 27
3.1 加载着色器 27
3.2 编译着色器 29
3.3 把着色器一起链接进OpenGL的程序 33
3.4 做最后的拼接 35
3.5 在屏幕上绘制 39
3.6 小结 43
3.7 练习 43
第4章 增加颜色和着色 44
4.1 平滑着色 45
4.2 引入三角形扇 45
4.3 增加一个新的颜色属性 46
4.4 使用新的颜色属性渲染 52
4.5 小结 55
4.6 练习 55
第5章 调整屏幕的宽高比 56
5.1 宽高比的问题 57
5.2 使用虚拟坐标空间 58
5.3 线性代数基础 59
5.4 定义正交投影 62
5.5 加入正交投影 64
5.6 小结 67
5.7 练习 67
第6章 进入第三维 68
6.1 三维的艺术 68
6.2 从着色器到屏幕的坐标变换 69
6.3 添加w分量创建三维图 71
6.4 使用透视投影 72
6.5 定义透视投影 73
6.6 在代码中创建投影矩阵 75
6.7 开始使用投影矩阵 76
6.8 增加旋转 79
6.9 小结 81
6.10 练习 82
第7章 用纹理增加细节 83
7.1 理解纹理 84
7.2 把纹理加载进OpenGL中 85
7.3 创建新的着色器集合 90
7.4 为顶点数据创建新的类结构 91
7.5 为着色器程序添加类 95
7.6 绘制纹理 99
7.7 小结 101
7.8 练习 101
第8章 构建简单物体 102
8.1 合并三角形带和三角形扇 102
8.2 添加几何图形的类 104
8.3 添加物体构建器 105
8.4 更新物体 112
8.5 更新着色器 113
8.6 集成所有的变化 114
8.7 小结 119
8.8 练习 119
第9章 增加触控反馈:与空气曲棍球游戏交互 120
9.1 为Activity增加触控支持 120
9.2 增加相交测试 122
9.3 通过拖动移动物体 130
9.4 增加碰撞检测 132
9.5 小结 136
9.6 练习 137
第二部分 构建三维世界
第10章 用粒子增添趣味 140
10.1 为一个简单的粒子系统创建一组着色器 141
10.2 添加粒子系统 144
10.3 绘制粒子系统 148
10.4 扩散粒子 150
10.5 添加重力 152
10.6 用累加混合技术混合粒子 153
10.7 自定义点的外形 153
10.8 把每个点绘制为一个精灵 154
10.9 小结 156
10.10 练习 156
第11章 增加天空盒 157
11.1 创建天空盒 157
11.2 把立方体贴图加载到OpenGL中 159
11.3 创建立方体 161
11.4 增加天空盒着色器程序 163
11.5 在场景中加入天空盒 165
11.6 围绕场景移动相机 167
11.7 小结 169
11.8 练习 169
第12章 增加地形 170
12.1 创建高度图 170
12.2 创建顶点和索引缓冲区对象 171
12.3 加载高度图 173
12.4 绘制高度图 176
12.5 遮罩被隐藏的物体 180
12.6 小结 183
12.7 练习 183
第13章 点亮世界 184
13.1 仿真光照的效果 184
13.2 用朗伯体反射实现方向光 186
13.3 添加点光 192
13.4 小结 199
13.5 练习 199
第14章 创建动态壁纸 200
14.1 实现动态壁纸的Service组件 200
14.2 权衡系统的其余部分 207
14.3 小结 209
14.4 练习 209
第15章 采取下一步行动 211
15.1 展望其他平台 211
15.2 了解更高级的技术 213
15.3 与世界分享你的艺术视野 216
附录A 投影背后的矩阵数学 217
附录B 调试 223
参考文献 228

教学资源推荐
作者: 陈作聪 苏静 王龙 等编著
作者: 苏莉蔚 主编 刘威 副主编 姜楠 白洪涛 孙元 参编
作者: 谢满德 凌云 陈志贤 刘文强 张国萍 编著
作者: (美) Bruce Eckel
参考读物推荐
作者: (德)Ralph Steyer 著
作者: 吕兆星 郑传峰 宋天龙 杨晓鹏 著 尹慧敏 审校