具体描述
本书的主要内容:
在本书第一部分,会学习如何创建一个简单的空气曲棍球游戏,包括触控、纹理和基本原理。这个项目会教你如何成功地初始化OpenGL并将数据发送到屏幕上,以及如何使用基本的向量和矩阵数学创建三维世界。你也会学到Android的许多特定细节,比如在Dalvik虚拟机和本地环境之间编码数据(marshal data)以及如何在主线程和渲染线程间安全地传送数据。
在本书第二部分,你就可以在第一部分学习到的知识的基础上开始搭建三维世界中的效果,比如光照和地形渲染,接下来还会学习如何创建可以运行在Android主屏幕(home screen)上的动态壁纸。
本书的读者对象:
如果对在Android上开发更高级的图形程序感兴趣,本书就是为你所写的。本书假定你有一些编程经验,包括Java和Android的经验。
作者简介
Kevin Brothaler是一家专注于移动软件开发的公司Digipom的创始人。他在Android开发方面经验丰富。他管理着"Learn OpenGL ES"网站(http://www.learnopengles.com/), 该在线网站全部关于Android下OpenGL和WebGL的。.
目录信息
推荐序
致 谢
前 言
第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
· · · · · · (收起)
读后感
这是一本不错的入门书。我用了几个月的时间,从头看到尾儿。每一章节都有示例代码,我是手动的敲的,比较有收获。越往后的几个章节理解上越有困难,毕竟里面有的部分依赖的是高等数学的知识。但是总体上,这本书适合初学者。让学习者对OpenGL有了一个大体的了解,不能说有多深...
这是一本不错的入门书。我用了几个月的时间,从头看到尾儿。每一章节都有示例代码,我是手动的敲的,比较有收获。越往后的几个章节理解上越有困难,毕竟里面有的部分依赖的是高等数学的知识。但是总体上,这本书适合初学者。让学习者对OpenGL有了一个大体的了解,不能说有多深...
这是一本不错的入门书。我用了几个月的时间,从头看到尾儿。每一章节都有示例代码,我是手动的敲的,比较有收获。越往后的几个章节理解上越有困难,毕竟里面有的部分依赖的是高等数学的知识。但是总体上,这本书适合初学者。让学习者对OpenGL有了一个大体的了解,不能说有多深...
这是一本不错的入门书。我用了几个月的时间,从头看到尾儿。每一章节都有示例代码,我是手动的敲的,比较有收获。越往后的几个章节理解上越有困难,毕竟里面有的部分依赖的是高等数学的知识。但是总体上,这本书适合初学者。让学习者对OpenGL有了一个大体的了解,不能说有多深...
为了做VR,找到了这本书,除了基本的实践内容之外,还讲了openGL与openGL ES之间的关系原理。对初学者来说能够很好的理解。整本书围绕一个例子,对opengl es做了较为全面的介绍。比较赞的时,书里还对矩阵变换,基础的内容做了非常详细的讲解。帮助读者既知其然,也能知其所以...
用户评价
书中对底层硬件架构和驱动交互的解读,达到了一个令人印象深刻的深度。在很多教程中,图形API的调用常常被抽象成一个黑箱,开发者只需要知道输入和输出即可。然而,本书大胆地揭示了这些“黑箱”内部的运作机制,例如Vulkan或Metal背后的同步机制、内存对齐的重要性,以及不同的渲染路径对功耗的影响。这种深挖到底的精神,对于那些追求极致性能和跨平台兼容性的工程师来说,简直是如获至宝。我过去在调试一些棘手的渲染伪影问题时,常常需要花费大量时间在官方规范文档中寻找蛛丝马迹,但书中对这些底层细节的清晰阐述,往往能一语中的地指出问题的根源所在,极大地节省了调试时间。它不仅仅教会你“怎么做”,更重要的是解释了“为什么必须这么做”,这种对技术原理的深刻洞察,是快速成长为高级工程师的必经之路。
这本书的装帧设计和印刷质量着实让人眼前一亮,那种沉稳又不失现代感的封面风格,一看就知道里面内容的专业度和深度。我个人对技术书籍的纸张选择和排版布局非常挑剔,很多教材为了省成本会使用反光严重的纸张,或者字体太小、行距太挤,读起来非常费力。然而,这本我拿到的书,无论是纸张的细腻度,还是清晰度都达到了很高的水准,长时间阅读眼睛也不会感到明显的疲劳。尤其是一些复杂的图形渲染流程图和代码示例部分,作者显然在版式设计上花费了大量心血,关键代码块的着重处理,使得那些晦涩难懂的API调用逻辑变得一目了然。这种对阅读体验的重视,在我看来,是区分一本优秀技术手册和普通参考资料的重要标志。很多时候,我们学习新技术,光是理解概念就已经很吃力了,如果阅读工具本身就不友好,那学习的效率自然会大打折扣。这本书在硬件层面上,就为我们搭建了一个非常舒适的学习环境,让人愿意主动沉下心去钻研那些深奥的底层细节。
初翻阅此书的目录时,我最大的感受是其内容的广度和体系的完整性。很多市面上的图形编程书籍往往侧重于某个特定API版本或者仅仅停留在理论介绍的层面,读者读完后依然感觉自己像是“空中楼阁”的建造者,缺乏实操的落地感。但这本书似乎打破了这种局限,它不仅仅罗列了各种着色器语言的语法规则,更重要的是,它深入剖析了现代移动图形API的设计哲学和渲染管线的精妙之处。从最基础的矩阵变换、光照模型,到更进阶的延迟渲染、后处理特效的实现,作者似乎将自己多年的实战经验毫无保留地倾囊相授。我特别欣赏其中对于性能优化章节的安排,没有用空泛的“要优化”来搪塞,而是通过具体的案例展示了CPU和GPU之间数据传输的瓶颈在哪里,以及如何通过合理的资源管理来榨取每一份性能。这种由浅入深、由理论到实践的逻辑递进,让一个有一定基础的开发者也能从中找到提升的方向,避免了初学者无所适从,也让资深人士能找到新的启发点。
这本书的叙事风格非常注重“讲故事”的艺术,这在技术书籍中是难能可贵的。作者避免了那种冰冷的、纯粹的指令式灌输,而是像一位经验丰富的导师在耐心指导你如何解决一个实际项目中的难题。比如说,在讲解到一个复杂效果的实现步骤时,作者会先抛出一个视觉上的目标,然后围绕这个目标,逐步引入所需的数学原理和编程接口,最终完美收官。这种结构不仅增强了学习过程的趣味性,更重要的是,它培养了读者解决问题的整体思维框架。我发现,当我遇到一个陌生的图形需求时,我不再是盲目地去查阅API文档,而是能下意识地按照书中那种“需求分析—理论支撑—代码实现—效果验证”的流程进行思考。这种思维训练远比单纯记住几个函数名更有价值,它赋予了读者举一反三、独立创新构建复杂场景的能力,这才是真正意义上的“授人以渔”。
从实操性和工具链的整合来看,这本书展现出极强的与时俱进的特点。它所涵盖的技术栈,明显是面向当前乃至未来几年主流移动平台开发的趋势。我特别关注了书中对于最新特性支持的描述,那些集成在较新SDK中的高效渲染工具和调试辅助手段,都在书中得到了详尽的介绍和演示。这确保了读者在学习过程中不会落伍,所学到的知识和实践的案例都具有很高的时效性和实用价值。更值得一提的是,作者在不同操作系统和硬件平台之间的差异处理上也给出了非常中肯的建议,而不是偏废任何一方。对于需要构建跨平台解决方案的团队而言,这种平衡的视角尤为宝贵。它不是简单地堆砌代码示例,而是提供了在不同生态下适配和优化的具体策略,使得这本书的参考价值远远超出了一个单纯的技术手册范畴,更像是一个移动图形开发的“全景战略地图”。
不错的一本书
8.17~9.9,一本非常好的 OpenGL ES 入门书。 关键是能感觉出来译者比较用心,这还是挺难得的。
入门书绝对满分了
通过例子来学习 opengl es,入门篇真的赞的不要不要的。而且关于图形学的解释很到位,很容易让人理解。 我把代码移植到 Windows 平台了,采用 c++ 开发。链接在这里。 https://my.oschina.net/iirecord/blog/817165
深受其益,对于 GLSL语言撰写 编译 构建物体对象 建立缓冲区 存取属性数据 渲染 给予了较为清晰的解释,线性代数,几何数学,高等数学方面还需要进一步学习,相关知较为迷糊。 代码地址在:https://github.com/MartinRGB/android-prototype-learning