OpenGL ES 2.0游戏与图形编程——适用于iOS 和 Android
作者简介:
Romain Marucchi-Foino是当今流行的移动游戏引擎SIO2(http://sio2interactive.com)的原作者和创建者。Romain以前是一名游戏引擎开发人员,自从iPhone诞生以来,Romain就一直致力于使用OpenGL ES为移动设备创建先进的游戏引擎。目前,他是sio2interactive.com的一名高级3D程序员(SIO2引擎的正式开发人员),该引擎通过App Store和Android Market驱动了数以千计的游戏和3D应用程序。凭借在移动游戏行业积累的丰富经验,他为许多网上社区、出版物以及博客作出重大贡献。
目录:
目 录 第1章 入门 1 1.1 软件需求 1 1.1.1 针对iOS开发人员 1 1.1.2 针对Android开发人员 2 1.2 下载本书的SDK 3 1.3 导入项目 4 1.3.1 针对iOS开发人员 5 1.3.2 针对Android开发人员 5 1.4 模板 6 1.5 小结 7 第2章 设置图形投影 9 2.1 三种基本的投影类型 9 2.2 正射2D投影 11 2.2.1 程序和项目初始化 12 2.2.2 顶点和片段着色器 14 2.2.3 链接着色器程序 16 2.2.4 绘图代码 18 2.3 正交投影 23 2.4 透视投影 26 2.5 小结 27 第3章 处理复杂几何图形 29 3.1 Wavefront文件格式 29 3.1.1 cube.obj 30 3.1.2 cube.mtl 31 3.2 准备OBJ浏览器代码 31 3.3 加载OBJ 32 3.4 构建着色器 35 3.4.1 顶点着色器 35 3.4.2 片段着色器 36 3.4.3 顶点缓冲区对象 36 3.4.4 存储顶点数据 36 3.4.5 构建顶点数据数组(VBO) 38 3.4.6 构建元素数组VBO 39 3.5 构建VAO 40 3.6 渲染Momo 42 3.7 处理Touche事件 44 3.8 逐顶点光照 45 3.8.1 顶点着色器的光照计算 46 3.8.2 修改片段着色器 47 3.8.3 更多uniform变量 48 3.9 对Momo进行美化 49 3.9.1 加载纹理 49 3.9.2 调整顶点数据 50 3.9.3 向顶点着色器添加UV 支持 52 3.9.4 向片段着色器添加纹理支持 52 3.9.5 绑定纹理 53 3.10 小结 54 第4章 构建场景 55 4.1 处理多个对象 55 4.2 代码结构 56 4.3 加载和绘制场景 57 4.4 着色器代码 61 4.5 不同的对象类型 62 4.6 绘制顺序 62 4.7 修复场景 63 4.7.1 Uber Shader 63 4.7.2 使用Uber Shader 64 4.7.3 渲染循环对象分类 67 4.7.4 双面 69 4.8 逐像素光照 71 4.8.1 使顶点着色器更加丰富 71 4.8.2 获取使用了更多Uber的片段着色器 72 4.8.3 封装实现代码 74 4.9 小结 77 第5章 优化 79 5.1 基本应用程序 79 5.2 从三角形到三角形带 80 5.3 构建三角形带 81 5.4 纹理优化 82 5.5 添加16位纹理转换 83 5.6 PVR纹理压缩 84 5.7 仿造细节 85 5.7.1 凸凹贴图的实现 85 5.7.2 精度限定符优化 86 5.7.3 法线贴图光照计算 88 5.7.4 添加反射 90 5.8 几何图形和着色器LOD 91 5.9 纹理地图集 91 5.10 在软件中管理状态 92 5.11 自动着色器优化 93 5.12 小结 94 第6章 实时物理 95 6.1 物理对象类型 95 6.2 物理形状 96 6.3 使用Bullet 97 6.4 Hello Physics 97 6.5 碰撞回调、触发器和接触点 102 6.5.1 Contact-Added回调 103 6.5.2 Near回调 105 6.5.3 接触点 106 6.6 2D物理 107 6.6.1 更多形状! 108 6.6.2 构建物理对象 111 6.6.3 摄像头跟踪 112 6.6.4 用户交互 114 6.6.5 游戏逻辑 114 6.7 3D物理 118 6.7.1 Bullet文件格式 118 6.7.2 3D弹珠游戏 119 6.8 小结 125 第7章 摄像头 127 7.1 一触即发 128 7.2 摄像头视锥 130 7.2.1 视锥构建方式 131 7.2.2 视锥剪切的实现 132 7.2.3 更多剪切函数 133 7.3 摄像头飞行模式 134 7.4 带有碰撞检测的第一人称 摄像头 139 7.5 3D摄像头跟踪 141 7.6 带有碰撞的第三人称摄像头 143 7.7 小结 148 第8章 路径发现 149 8.1 Recast和Detour 149 8.2 导航 150 8.3 创建导航网格 151 8.4 3D物理拾取 153 8.5 玩家的自动驱动 157 8.6 使路径点可见 159 8.7 游戏“如果能就抓住我!” 161 8.8 了解你的敌人 164 8.9 游戏状态逻辑 165 8.10 小结 168 第9章 音频及其他极佳的游戏编程资料 171 9.1 OpenAL 172 9.2 OGG Vorbis 173 9.3 Hello World OpenAL样式 173 9.4 初始化OpenAL 174 9.5 播放静态内存声音 174 9.6 定位声源 176 9.7 钢琴游戏 177 9.7.1 加载静态的流式声音 178 9.7.2 颜色提取 182 9.7.3 钢琴游戏逻辑 185 9.7.4 最后的调整 188 9.8 滚球游戏 190 9.8.1 GFX着色器 191 9.8.2 链接定位声源 192 9.8.3 加速计驱动摄像头 196 9.8.4 廉价的FX 199 9.8.5 游戏逻辑和调整 200 9.9 小结 206 第10章 高级光照 207 10.1 灯的类型 207 10.2 使用光源 208 10.2.1 定向灯着色器 211 10.2.2 使用Struct作为Uniform 214 10.3 点灯 217 10.3.1 点光源着色器代码 218 10.3.2 光的衰减 221 10.3.3 带有衰减代码的点光源 222 10.3.4 衰减Uniform变量 223 10.3.5 球体点光源 224 10.3.6 调整点光源代码 225 10.3.7 聚光灯 227 10.3.8 聚光灯着色器代码 229 10.4 多个光源 231 10.5 使着色器程序动态化 234 10.6 小结 235 第11章 高级FX 237 11.1 渲染到纹理 238 11.2 后处理效果 238 11.2.1 第一渲染通道 241 11.2.2 第二渲染通道 242 11.2.3 全屏通道和模糊着色器 243 11.3 投影纹理 246 11.4 投影着色器 249 11.5 投影实时阴影 250 11.6 使用深度纹理投射阴影 254 11.7 关于帧缓冲对象的其他内容 255 11.8 粒子 255 11.9 小结 257 第12章 骨骼动画 259 12.1 传统的动画系统与最新的动画系统 259 12.2 MD5文件格式 261 12.3 加载MD5网格 261 12.4 对网格进行动画处理 264 12.4.1 LERP 266 12.4.2 SLERP 266 12.5 混合动画 267 12.6 相加混合 269 12.7 小结 271
评论