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

OpenGL ES应用开发实践指南:iOS卷
作者 : (美)Erik M. Buck 著
译者 : 徐学磊 译
丛书名 : 华章程序员书库
出版日期 : 2013-06-27
ISBN : 978-7-111-42867-1
定价 : 69.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 277
开本 : 16
原书名 : Learning OpenGL ES for iOS: A Hands-On Guide to Modern 3D Graphics Programming
原出版社: Pearson Education Asia
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

OpenGL ES掌控着iPhone、iPod和iPad中的用户界面和图形功能。本书介绍了如何在iOS环境下有效利用OpenGl ES。内容包括理解OpenGL ES计算机图形概念和iOS图形架构、整合 Cocoa与OpenGL ES以发挥苹果平台的最大威力、纹理创建、渲染3D对象、检测用户与3D对象的交互等等。

图书特色

OpenGL ES技术是苹果公司的iPhone、iPod touch、iPad、视频游戏机、飞机座舱显示器等智能设备,以及非智能机设备的用户界面和图形能力的基础。在本书中,Erik M. Buck 讲解了如何在苹果公司的iOS环境下充分利用OpenGL ES。
书中涵盖的主要是使用最新版OpenGL ES的现代、高效的方法,以帮助读者避开散落在互联网上的不相关的、过时的,以及误导性的方法。Buck利用Objective-C和Cocoa展示了怎么使用苹果公司强大、高效的GLKit框架来最大化你的生产率,以获得紧密的平台一体性,并发布异常精良的应用。
如果你用过C或者C++语言并且熟悉面向对象编程的基础,那么本书集合了你要完全精通iOS上的OpenGL ES图形编程需要的所有知识,包括专门设计的用于快速启动你自己的项目的可重用的实例。

本书主要内容:
理解OpenGL ES计算机图形的核心概念以及iOS图形机制
结合Cocoa Touch与OpenGL ES以利用苹果平台的力量
从头开始创建纹理、透明度、混合、多重纹理,以及压缩
模拟环境光、漫反射光和镜面反射光
使用变换从任意视点渲染3D几何对象
通过应用逻辑控制时间创建场景动画
通过分割数据来绘制带有连绵地形的广阔户外场景
检测并处理用户与3D几何图形的交互
实现从天空盒到粒子和公告牌的特效
系统地优化绘图性能
理解在计算机图形中要用到的重要线性代数概念
设计并构建一个结合了本书所有知识的完整模拟程序


作者简介
Erik M. Buck  资深iOS应用和苹果应用开发专家,与人合著了《Cocoa Programming》和《Cocoa Design Patterns》等经典著作。1993年创建了他的第一家公司——EMB,这家公司后来发展成了航空航天软件和娱乐软件产业的领导者。Buck还在建筑行业工作过,当过理科8年级的老师,开过帆布油画肖像展,开发过替代燃料交通工具。他还是莱特州立大学计算机科学系的助理教授,当前教的课程是iOS编程。他的网站是www.cosmicthump.com。

图书前言

OpenGL ES技术是苹果iOS设备(iPhone、iPod Touch以及iPad)上的用户界面和图形绘制能力的基础。“ES”代表嵌入式系统(Embedded System),这个术语适用于视频游戏机、飞机驾驶员座舱显示器,并且广泛适用于几乎所有生产商的手机。OpenGL ES是桌面操作系统OpenGL版本的一个子集。因此,OpenGL ES应用通常也适用于桌面系统。
  本书介绍了最新图形编程,同时对iOS设备中OpenGL ES的有效使用做了简洁说明。书中有很多用于演示图形编程概念的例子程序。在网站http://opengles.cosmicthump.com/上保存着很多例子和相关文章。本书对于从底层位操作到高级主题的图形技术都做了详细的解释。
  学习图形编程的重大挑战体现在当你第一次试图整理散落在互联网上的成堆的误导性信息和过时的例子时。最初OpenGL是1992年的最先进图形工作站中的一个小型软件库。由于图形硬件改进得频繁且更新较快,以至于现在的移动设备已经胜过OpenGL刚出现时能够买到的最好的硬件。随着硬件技术的提高,OpenGL设计者当时所做的一些折中方法和假设已不再有意义了。现在至少存在着12种不同的OpenGL标准,不过最新的OpenGL ES省略了很多对于以前版本中的常见技术的支持。不幸的是,在谷歌的搜索结果中还存在相当多的过时的代码和次优方案,以及几十年来形成的过时的经验。本书将主要关注最新、最高效的方法,以避免分心于过时且不相干的练习上。
读者对象
  本书的读者包括学习编程的学生以及精通其他学科又想要学习图形的程序员。读者不需要有计算机图形的经验,但需要熟悉C或者C++以及面向对象编程的概念。有iOS、Objective-C编程语言和Cocoa Touch框架的使用经验是最好的,但不是必需的。在学完本书后,你将有能力在你自己的iOS应用中使用高级计算机图形技术。
示例代码
  本书提供的很多例子可以用作你自己的工程的起始点。可以从http://opengles.cosmicthump.com/learning-opengl-es-sample-code/下载本书例子的源代码,这些源码使用MIT软件许可协议:http://www.opensource.org/licenses/mit-license.html。
  这些例子是使用苹果的免费开发者工具建立的,用的是Objective-C编程语言,以及苹果的Cocoa Touch面向对象的软件框架。OpenGL ES应用程序编程接口(API)由美国国家标准协会(ANSI)/国际标准化组织(ISO) C 编程语言的数据类型和函数组成。作为ANSI/ISO C的一个超集,Objective-C程序原生地支持与OpenGL ES交互。
  所有iOS应用都或多或少地依赖于Cocoa Touch框架,该框架是基于苹果的Objective-C语言的。一些开发者通过重用现存的用C或者C++写就的跨平台库来最小化自己的应用与Cocoa Touch的融合。作为UNIX操作系统的一个派生物,iOS包含了标准C库和UNIX API,这使得移植跨平台代码到苹果设备上变得出人意料的简单。OpenGL ES自身的一部分也是由跨平台C库组成的。尽管如此,不想使用Cocoa Touch和Objective-C的开发者几乎总是给自己帮倒忙。苹果面向对象的框架史无前例地提升了程序员的生产率。更重要的是,Cocoa Touch提供了用户对iOS应用所期望的平台一体性和精良性。
  本书包含了Objective-C和Cocoa Touch。苹果的基于Objective-C的GLKit框架的强大和简洁是如此令人信服,以至于它明确地指出了图形编程的未来发展方向。如果不使用GLKit而只关注操作系统的底层C接口和OpenGL ES,本书几乎无法声称自己教授的是最新技术。
Objective-C
  与ANSI/ISO C一样,Objective-C是一个非常小型的语言。有经验的C程序员通常会发现,他们可以在至多几个小时内很容易地学会Objective-C。Objective-C在开启了一个富有表现力的面向对象的编程风格的同时,最低限度地扩充了C语言。本书详述了图形编程,同时在需要的时候会对Objective-C语言的特性做适当的介绍。你并不需要精通Objective-C或者Cocoa Touch,但是你需要熟悉C或者C++以及面向对象编程的概念。你会发现使用Objective-C语言实现应用逻辑是非常容易和简洁的。Cocoa Touch经常简化应用的设计,尤其是在响应用户输入的时候。
C++
  ANSI/ISO C++编程语言是ANSI/ISO C的一个不是很完美的超集,但它几乎总是可以自由地与C语言混合。OpenGL ES与C++可以无缝配合,并且OpenGL结构审查委员会(ARB)会监督OpenGL ES的规范,以保证其未来与C++的兼容性。
  C++编程语言是用于图形编程的最常见的编程语言之一。但是,C++是一个非常大型的编程语言,充满了惯用语法和精妙法则。对于C++语言要达到中等掌握水平可能要花费数年的时间。使用C++做图形编程有许多优势,例如,使用C++操作符重载功能可以让图形程序中数学运算的表达更加简洁。
  混合使用C++与Objective-C代码并没有任何障碍。苹果开发者工具甚至支持Objective-C++形式,这种形式允许在一个语句中混合使用C++和Objective-C代码。但是Objective-C是iOS的主要编程语言。在苹果和第三方提供的几乎所有iOS示例代码中你都可以发现Objective-C的代码。如果你想使用C++也是可以的,但这超出了本书讨论的范围。
使用GLKit作为导向
  本书通过对苹果GLKit的探索来讲解图形编程的最新概念。在一些情况下,某些章节会通过实现GLKit的部分对象来讲解和演示这些概念。这样做有几个目的:使用GLKit来简化启动项目所需的步骤。在第2章末尾你会建立起3个OpenGL ES应用,并在你的iOS设备上运行。一章接着一章,逐渐创建彼此关联的很多主题,最终创建一个可重用的知识和代码的基础结构。当付出努力以从零开始创建时,可以帮助你获取一个想要的最终结果的清晰概念。为了获得有价值的最终结果,GLKit设置了一个高质量的现代基准。
  本书会消除你关于怎么使用OpenGL ES来实现和扩展GLKit的所有疑云。学完本书后,你会成为一个GLKit专家,彻底理解GLKit,同时拥有在你的iOS应用中使用GLKit的能力。GLKit演示了当前对于OpenGL ES的最好做法,同时如果你需要,甚至可以将其作为你自己的跨平台库的一个模板。
致谢
  写一本书需要很多人的支持。首先,感谢我的妻子Michelle,以及我的孩子Joshua、Emma和Jacob,谢谢你们的理解和支持。其次,感谢出版社的编辑们,他们为本书的写作提供了非常宝贵的建议。最后,感谢那些在学术上、专业上、精神上、道德上和艺术上将影响我一生的人。

上架指导

计算机\程序设计

封底文字

OpenGL ES技术是苹果公司的iPhone、iPod touch、iPad、视频游戏机、飞机座舱显示器等智能设备,以及非智能机设备的用户界面和图形能力的基础。在本书中,Erik M. Buck 讲解了如何在苹果公司的iOS环境下充分利用OpenGL ES。
书中涵盖的主要是使用最新版OpenGL ES的现代、高效的方法,以帮助读者避开散落在互联网上的不相关的、过时的,以及误导性的方法。Buck利用Objective-C和Cocoa展示了怎么使用苹果公司强大、高效的GLKit框架来最大化你的生产率,以获得紧密的平台一体性,并发布异常精良的应用。
如果你用过C或者C++语言并且熟悉面向对象编程的基础,那么本书集合了你要完全精通iOS上的OpenGL ES图形编程需要的所有知识,包括专门设计的用于快速启动你自己的项目的可重用的实例。
本书主要内容:
(1)理解OpenGL ES计算机图形的核心概念以及iOS图形机制
(2)结合Cocoa Touch与OpenGL ES以利用苹果平台的力量
(3)从头开始创建纹理、透明度、混合、多重纹理,以及压缩
(4)模拟环境光、漫反射光和镜面反射光
(5)使用变换来从任意视点渲染3D几何对象
(6)通过应用逻辑控制时间以创建场景动画
(7)通过分割数据来绘制带有连绵地形的广阔户外场景
(8)检测并处理用户与3D几何图形的交互
(9)实现从天空盒到粒子和公告牌的特效
(10)系统地优化绘图性能
(11)理解在计算机图形中要用到的重要线性代数概念
(12)设计并构建一个结合了你从本书学到的所有知识的完整模拟程序

作者简介

(美)Erik M. Buck 著:暂无简介

译者简介

徐学磊 译:暂无简介

译者序

OpenGL ES是桌面版OpenGL的一个子集,是现代移动设备绘图功能的基础。其中“ES”代表嵌入式系统。OpenGL ES定义了嵌入式3D绘图的标准。GLKit是苹果公司的iOS 5中引入的一个软件框架,这个框架简化了很多常用的编程任务,隐藏了OpenGL ES版本间的差异,使用这个框架可以提高软件开发的生产率。本书主要讲解的是iOS 5中的GLKit软件框架,以及GLKit所支持的OpenGL ES 2.0版本。
  本书从基本概念开始,全面介绍了OpenGL ES计算机图形的核心概念以及iOS的图形机制,包括地形、特效、模型、动画、视点变化、纹理、灯光和优化等。本书例子丰富有趣,一般每章都有多个例子,并且源码结构合理,注释全面。本书会告诉你如何在苹果公司的iOS环境中充分地利用好OpenGL ES。本书专注于最新版OpenGL ES的最新使用方法,因此可以让你避开散落在互联网上的不相关的、过时的,或者误导性的方法。本书的第11章为数学速查章节,非常方便,如果你是计算机图形的新手,可以先阅读这一章以帮助你更好地理解本书的内容。如果你熟悉桌面版OpenGL,但是不了解OpenGL ES以及GLKit,那么这本书也非常适合你。
  本书的翻译经历了3个月,非常感谢机械工业出版社华章分社的编辑们在翻译过程中给予我的支持和帮助。对于译者来说,能够给读者带来切实的帮助是我最大的荣幸。虽然在翻译的过程中竭力以信、达、雅为目标,但是由于水平有限,失误和遗漏在所难免,恳请读者批评指正。

译者

图书目录

译者序
前言
第1章使用现代移动图形硬件 / 1
1.1 3D渲染 / 1
1.2 为图形处理器提供数据 / 3
1.2.1 缓存:提供数据的最好方式 / 4
1.2.2 帧缓存 / 5
1.3 OpenGL ES的上下文 / 6
1.4 一个3D场景的几何数据 / 7
1.4.1 坐标系 / 7
1.4.2矢量 / 9
1.4.3点、线、三角形 / 11
1.5小结 / 11
第2章让硬件为你工作 / 12
2.1使用OpenGL ES绘制一个Core Animation层 / 12
2.2结合Cocoa Touch和OpenGL ES / 14
2.2.1Cocoa Touch / 14
2.2.2使用苹果开发者工具 / 15
2.2.3Cocoa Touch应用架构 / 15
2.3OpenGLES_Ch2_1示例 / 18
2.3.1OpenGLES_Ch2_1AppDelegate类 / 18
2.3.2Storyboards / 19
2.3.3OpenGLES_Ch2_1ViewController类的interface / 19
2.3.4OpenGLES_Ch2_1ViewController类的实现 / 20
2.3.5支持文件 / 30
2.4深入探讨GLKView是怎么工作的 / 31
2.5对于GLKit的推断 / 40
2.6小结 / 46
第3章纹理 / 48
3.1 什么是纹理 / 48
3.1.1对齐纹理和几何图形 / 49
3.1.2纹理的取样模式 / 50
3.1.3MIP 贴图 / 52
3.2OpenGLES_Ch3_1示例 / 52
3.3深入探讨GLKTextureLoader是怎么工作的 / 56
3.4OpenGLES_Ch3_3示例 / 62
3.5透明度、混合和多重纹理 / 63
3.5.1在OpenGLES_Ch3_4示例中混合片元颜色 / 64
3.5.2 示例OpenGLES_Ch3_5中的多重纹理 / 66
3.5.3在OpenGLES_Ch3_6示例中自定义纹理 / 68
3.6纹理压缩 / 70
3.7小结 / 71
第4章散发一些光线 / 72
4.1环境光、漫反射光、镜面反射光 / 73
4.2计算有多少光线照向每个三角形 / 74
4.3使用GLKit灯光 / 79
4.4 OpenGLES_Ch4_1示例 / 80
4.5把灯光烘焙进纹理中 / 86
4.6片元计算 / 87
4.7小结 / 88
第5章改变你的视点 / 89
5.1深度渲染缓存(Depth Render Buffer) / 89
5.2例子OpenGLES_Ch5_1和例子OpenGLES_Ch5_2 / 91
5.3深入探讨不用GLKit添加深度缓存 / 96
5.4变换 / 98
5.4.1基本变换 / 98
5.4.2顺序很重要 / 101
5.4.3projectionMatrix和modelviewMatrix / 102
5.4.4textureMatrix / 105
5.5复合变换手册 / 107
5.5.1倾斜 / 107
5.5.2围着一个点旋转 / 107
5.5.3围着一个点缩放 / 107
5.6透视和平截头体 / 108
5.7小结 / 109
第6章动画 / 110
6.1场景内移动:例子OpenGLES_Ch6_1 / 111
6.1.1看向一个特定的3D位置 / 111
6.1.2使用时间 / 113
6.2动画化顶点数据 / 116
6.2.1使用索引顶点 / 118
6.2.2OpenGLES_Ch6_2示例 / 119
6.3动画化颜色和灯光:例子OpenGLES_Ch6_3 / 122
6.4动画化纹理 / 126
6.4.1OpenGLES_Ch6_4示例 / 126
6.4.2OpenGLES_Ch6_5示例 / 128
6.5小结 / 130
第7章加载和使用模型 / 131
7.1建模工具和格式 / 132
7.2读取modelplist文件 / 136
7.3OpenGLES_Ch7_1示例 / 138
7.4高级模型 / 142
7.4.1骨骼动画 / 142
7.4.2蒙皮 / 147
7.4.3 逆动力学和物理模拟 / 150
7.5小结 / 150
第8章特效 / 151
8.1天空盒 / 151
8.2深入探讨GLKSkyboxEffect是怎么工作的 / 154
8.3 粒子 / 164
8.4公告牌 / 170
8.5小结 / 177
第9章优化 / 178
9.1尽可能减少渲染 / 178
9.1.1基于视平截体的剔除 / 179
9.1.2简化 / 189
9.2不要猜:解析(Profile) / 189
9.2.1工具OpenGL ES Performance Detective / 190
9.2.2工具Instruments / 191
9.3尽量减少缓存复制 / 192
9.4尽量减少状态变化 / 192
9.5小结 / 193
第10章地形和拾取 / 195
10.1地形的实现 / 195
10.1.1高度图 / 196
10.1.2地形瓦片 / 197
10.1.3地形效果 / 200
10.2添加模型 / 205
10.2.1模型放置 / 206
10.2.2模型效果 / 206
10.3OpenGL ES摄像机 / 208
10.4拾取 / 213
10.5优化 / 221
10.6小结 / 228
第11章数学速查 / 229
11.1概述 / 229
11.2解码矩阵 / 230
11.2.1从平截体获取矩阵 / 233
11.2.2透视 / 236
11.2.3矢量的坐标轴分量 / 237
11.2.4点变换 / 238
11.2.5 转置矩阵和逆矩阵 / 240
11.3四元法 / 241
11.4常用的图形数学 / 242
11.4.1简单矢量运算 / 242
11.4.2矢量标量积 / 243
11.4.3矢量的矢量积 / 243
11.4.4model-view矩阵 / 244
11.4.5投影矩阵 / 245
11.5小结 / 245
第12章理清整体思路 / 246
12.1概述 / 246
12.2一切如故 / 248
12.2.1控制器子系统 / 249
12.2.2模型子系统 / 250
12.2.3 视图子系统 / 255
12.3设备动作 / 263
12.4小结 / 265

教学资源推荐
作者: Brian W.Kernighan
作者: 程学先 林姗 程传慧
作者: 郑阿奇,梁敬东
作者: Patrick Henry Winston, Sundar Narasimhan
参考读物推荐
作者: Steven Holzner
作者: (美)Kurt Cagle 等
作者:
作者: [美]弗拉维奥·荣凯拉(Flavio Junqueira) 本杰明·里德(Benjamin Reed) 著