OpenGL ES 2.0游戏开发(下卷):高级特效和典型案例

978-7-115-34469-4
作者: 吴亚峰
译者:
编辑: 张涛

图书目录:

目 录

第 1章 顶点着色器的妙用 1

1.1 飘扬的旗帜 1

1.1.1 基本原理 1

1.1.2 开发步骤 2

1.2 扭动的软糖 4

1.2.1 基本原理 4

1.2.2 开发步骤 5

1.3 风吹椰林场景的开发 6

1.3.1 椰子树随风摇摆的基本原理 6

1.3.2 开发步骤 7

1.4 展翅飞翔的雄鹰 10

1.4.1 基本原理 10

1.4.2 开发步骤 11

1.5 二维扭曲 13

1.5.1 基本原理 13

1.5.2 开发步骤 14

1.6 吹气膨胀特效 16

1.6.1 特效基本原理 16

1.6.2 特效开发步骤 17

1.7 OpenGL ES 1.x与OpenGL ES 2.0实现方案的对比 18

1.8 本章小结 19

第 2章 片元着色器的妙用 20

2.1 程序纹理技术 20

2.1.1 砖块着色器 20

2.1.2 沙滩球着色器 22

2.2 数字图像处理 23

2.2.1 卷积的基本知识 23

2.2.2 平滑过滤 24

2.2.3 边缘检测 25

2.2.4 锐化处理 26

2.2.5 浮雕效果 26

2.2.6 图像渐变 28

2.3 分形着色器 28

2.3.1 曼德布罗集简介 29

2.3.2 曼德布罗集着色器的实现 29

2.3.3 将曼德布罗集纹理应用到实际物体上 31

2.3.4 茱莉亚集着色器的实现 32

2.4 体积雾 33

2.4.1 基本原理 33

2.4.2 体积雾开发步骤 34

2.5 粒子系统火焰的开发 36

2.5.1 火焰的基本原理 36

2.5.2 火焰的开发步骤 38

2.6 本章小结 44

第3章 真实光学环境的模拟 45

3.1 反射环境模拟 45

3.1.1 案例效果与基本原理 45

3.1.2 反射环境开发步骤 46

3.2 折射环境模拟 48

3.2.1 案例效果与基本原理 48

3.2.2 开发步骤 49

3.3 色散效果的模拟 50

3.3.1 案例效果与基本原理 51

3.3.2 开发步骤 51

3.4 菲涅尔效果的模拟 52

3.4.1 案例效果与基本原理 52

3.4.2 菲涅尔效果开发步骤 53

3.5 凹凸映射 54

3.5.1 案例效果与基本原理 54

3.5.2 法向量纹理图的生成 55

3.5.3 案例的开发 58

3.6 真实感很强的地形 61

3.6.1 真实感地形的基本原理 62

3.6.2 真实感地形的开发步骤 62

3.7 本章小结 65

第4章 阴影及高级光照 66

4.1 投影贴图 66

4.1.1 投影案例效果与基本原理 66

4.1.2 开发步骤 67

4.2 阴影的重要性 69

4.3 平面阴影 71

4.3.1 平面阴影案例效果与基本原理 71

4.3.2 平面阴影开发步骤 72

4.4 阴影映射 74

4.4.1 阴影映射案例效果与基本原理 75

4.4.2 距离纹理图的生成 76

4.5.3 阴影场景的绘制 81

4.5 阴影贴图 83

4.5.1 阴影贴图案例效果与基本原理 83

4.5.2 阴影贴图开发步骤 84

4.6 聚光灯高级光源 85

4.6.1 聚光灯高级光源案例效果与基本原理 85

4.6.2 聚光灯高级光源开发步骤 86

4.7 光线跟踪 87

4.7.1 光线跟踪案例效果与基本原理 88

4.7.2 光线跟踪开发步骤 91

4.8 真实感水面倒影 100

4.8.1 水面倒影的基本原理 101

4.8.2 水面倒影的开发步骤 102

4.9 本章小结 107

第5章 让游戏更真实——游戏开发中的物理学 108

5.1 碰撞检测基本技术 108

5.1.1 AABB包围盒的基本原理 108

5.1.2 AABB包围盒的计算 109

5.1.3 AABB包围盒的碰撞检测 110

5.1.4 一个AABB包围盒的案例 112

5.1.5 旋转后的AABB包围盒 113

5.1.6 AABB包围盒的使用要点 117

5.1.7 OBB包围盒 117

5.2 穿透效应 118

5.2.1 案例的运行效果与基本原理 118

5.2.2 具体开发步骤 119

5.3 粒子系统 119

5.3.1 案例运行效果与基本原理 119

5.3.2 CPU版案例的开发 120

5.3.3 GPU版案例开发步骤 122

5.4 弹簧质点模型模拟旗帜 123

5.4.1 弹簧质点模型基本原理 123

5.4.2 弹簧质点模型案例的运行效果及开发步骤 124

5.5 弹簧质点模型模拟球网 133

5.5.1 弹簧质点模型的基本原理 133

5.5.2 弹簧质点模型的案例的运行效果及开发步骤 133

5.6 本章小结 135

第6章 游戏的心脏——物理引擎 136

6.1 物理引擎很重要 136

6.1.1 什么是物理引擎 136

6.1.2 常见的物理引擎 136

6.2 JBullet物理引擎概览 139

6.2.1 基本的物理学概念 139

6.2.2 JBullet中常用类的介绍 140

6.3 箱子相互碰撞的案例 147

6.3.1 案例运行效果及准备工作 147

6.3.2 案例的基本框架结构 148

6.3.3 常量类——Constant 149

6.3.4 3D场景渲染类——MySurfaceView 149

6.3.5 水平地面——TexFloor类 151

6.3.6 箱子——TexCube类 152

6.4 复合碰撞形状的使用 153

6.4.1 案例运行效果 153

6.4.2 立方体圆柱复合形状——CubeCylinder类 154

6.5 凹凸地形的案例 155

6.5.1 案例运行效果 155

6.5.2 地形类——LandForm 156

6.6 任意形状物体的碰撞 157

6.6.1 案例运行效果 157

6.6.2 加载物体类——LoadedObjectVertexNormal 157

6.6.3 加载物体刚体类——LoadRigidBody 158

6.7 铰链关节 159

6.7.1 铰链关节的基本知识 160

6.7.2 铰链关节案例的运行效果 160

6.7.3 铰链关节旋转角速度的计算 161

6.7.4 3D界面渲染类——MySurfaceView 162

6.8 滑动关节 164

6.8.1 滑动关节的基本知识 164

6.8.2 案例效果图 165

6.8.3 3D界面渲染类——MySurfaceView 165

6.9 六自由度关节 168

6.9.1 六自由度关节的基本知识 168

6.9.2 六自由度关节案例的运行效果 169

6.9.3 人偶类——Doll 170

6.9.4 拾取时采用的点对点关节 171

6.10 交通工具 174

6.10.1 交通工具开发要点 174

6.10.2 交通工具案例的运行效果 176

6.10.3 3D场景渲染类——MySurfaceView 176

6.10.4 汽车类——Car 178

6.10.5 汽车绘制类——VehicleDraw 182

6.11 Bullet物理引擎概览 183

6.11.1 Bullet物理引擎案例的运行效果 184

6.11.2 3D场景渲染类——GL2JNIView 184

6.11.3 本地方法声明及动态库加载类——JNIPort 186

6.11.4 初始化及渲染函数文件——main.cpp 187

6.11.5 水平地面类——TexPlane 189

6.11.6 箱子类——TexCube 192

6.12 Bullet软体 193

6.12.1 Bullet软件案例运行效果 193

6.12.2 初始化及渲染函数文件——main.cpp 194

6.12.3 软体类——SoftCloth 195

6.13 本章小结 197

第7章 让游戏主角的动作更丰富——骨骼动画 198

7.1 自己开发骨骼动画 198

7.1.1 骨骼动画的基本原理 198

7.1.2 骨骼动画开发步骤 201

7.1.3 机器人模型在地面上运动时的问题 206

7.2 ms3d文件的加载 210

7.2.1 ms3d文件的格式 210

7.2.2 案例的开发 213

7.3 本章小结 227

第8章 必知必会的开发技术——游戏开发小贴士 228

8.1 3D拾取技术 228

8.1.1 3D拾取案例效果与基本原理 228

8.1.2 开发步骤 230

8.2 多点触控 234

8.2.1 多点触控案例效果与基本原理 234

8.2.2 开发步骤 235

8.3 多键监听 237

8.3.1 案例效果与基本原理 238

8.3.2 开发步骤 238

8.4 本章小结 240

第9章 让应用运行更流畅——性能优化 241

9.1 着色器的优化 241

9.1.1 计算量与计算频率相关的问题 241

9.1.2 其他需要注意的问题 242

9.2 纹理图的优化 243

9.3 3D图形绘制的优化 244

9.3.1 CPU阶段的优化 244

9.3.2 几何阶段的优化 245

9.3.3 光栅化阶段的优化 247

9.3.4 尽量减少状态的变化 247

9.4 本章小结 247

第 10章 综合案例一——火力篮球 248

10.1 游戏背景及功能概述 248

10.1.1 游戏背景概述 248

10.1.2 游戏功能介绍 248

10.2 游戏的策划及准备工作 250

10.2.1 游戏的策划 250

10.2.2 Android平台下游戏开发的准备工作 250

10.3 游戏的架构 252

10.3.1 各个类简要介绍 252

10.3.2 游戏框架简介 254

10.4 公共类BasketBall_Shot_Activity 255

10.5 辅助界面相关类 261

10.5.1 主菜单界面CaiDanView类 261

10.5.2 设置界面ShengyinKGJiemian类 265

10.5.3 关于界面GuanYuView类 268

10.5.4 记录界面JiLuView类 271

10.5.5 数据库相关类SQLiteUtil 275

10.6 游戏界面相关类 277

10.6.1 游戏界面绘制类GLGameView 277

10.6.2 着色器程序管理器类ShaderManager 290

10.6.3 添加刚体进物理世界类TianjiaBody 291

10.6.4 添加胶囊刚体进物理世界类JiaoNangTianjiaBody 291

10.6.5 篮球控制类BasketBallForDraw 292

10.6.6 纹理矩形绘制类WenLiJuXing 293

10.7 游戏中着色器的开发 295

10.7.1 纹理的着色器 295

10.7.2 光照着色器 295

10.7.3 影子着色器 297

10.7.4 仪表盘背景着色器 299

10.7.5 篮网着色器 299

10.8 游戏的优化与改进 300

第 11章 综合案例二——3D虚拟停车场 301

11.1 游戏开发背景及功能概述 301

11.1.1 游戏开发背景 301

11.1.2 游戏功能介绍 301

11.2 游戏的策划及准备工作 303

11.2.1 游戏的策划 303

11.2.2 Android 平台下游戏开发的准备工作 304

11.3 游戏的架构 305

11.3.1 各个类简要介绍 305

11.3.2 游戏框架简介 308

11.4 常量及公共类 308

11.4.1 游戏主控类GameActivity 309

11.4.2 游戏常量类Constant 312

11.5 界面相关类 313

11.5.1 游戏欢迎界面类WelcomeView 313

11.5.2 主菜单类MainInterSurfaceView 315

11.5.3 选择界面类SelectVehicleLevelView 319

11.5.4 游戏界面类GameSurfaceView 323

11.6 交通工具相关类及接口 334

11.6.1 交通工具接口Vehicle 335

11.6.2 交通工具类Car_01 335

11.7 物体绘制相关类 340

11.7.1 纹理矩形绘制类TextureTextangle 340

11.7.2 交通工具绘制类VehicleDraw 342

11.7.3 路障类Roadblock 343

11.7.4 停车点类ParkPlace 344

11.7.5 关卡加载及绘制类LevelLoad 345

11.7.6 路面绘制类TexFloor 346

11.7.7 动态按钮类Button 348

11.7.8 方向盘类Streering 349

11.7.9 控制部件绘制类Control 352

11.8 游戏中的着色器开发 353

11.9 游戏的优化与改进 355

第 12章 综合案例三——WebGL模拟飞行 356

12.1 游戏背景及功能概述 356

12.1.1 游戏背景概述 356

12.1.2 游戏功能介绍 356

12.2 游戏的策划及准备工作 357

12.2.1 游戏的策划 358

12.2.2 Web 平台下游戏的准备工作 358

12.2.3 Obj模型加载工具介绍 359

12.3 游戏的架构 361

12.3.1 游戏中各个类简要介绍 361

12.3.2 游戏框架简介 362

12.4 游戏公共函数介绍 363

12.4.1 工具函数文件GLUtil.js 363

12.4.2 矩阵操作函数文件MatrixState.js 365

12.5 山地控制及绘制相关函数 366

12.5.1 无边界地形的控制及绘制原理 366

12.5.2 无边界山地地形绘制函数文件MountainMap.js 368

12.5.3 单位山地地形绘制函数文件MountainDraw.js 369

12.6 物体控制相关函数介绍 370

12.6.1 碰撞检测策略讲解 370

12.6.2 飞机绘制及控制文件Airplane.js 371

12.6.3 飞机绘制及控制文件Meter.js 375

12.6.4 爆炸动画绘制函数文件BoomPlay.js 376

12.7 物体绘制相关函数介绍 377

12.7.1 山地绘制函数文件Mountain.js 377

12.7.2 水面绘制文件WaterRect.js 379

12.7.3 纹理矩形绘制文件Rectangledraw.js 380

12.7.4 其他物体绘制文件ObjObject.js 381

12.8 游戏页面文件planeGame.htm介绍 382

12.9 游戏中运用的着色器介绍 386

12.9.1 普通物体着色器 386

12.9.2 山地地形着色器 388

12.9.3 水面矩形着色器 391

12.10 游戏的优化与改进 392

详情

通过案例详细讲解了OpenGL的应用,让读者学会如何驾驭复杂的应用程序,这些特性是目前市面上的一些书籍所没有的。本书中的大型案例均来源于真实的产品,100%原创,读者可以学以致用的尽快进入实战角色。本书通俗易懂,很适合读者开发项目中应用。

图书摘要

相关图书

DirectX 12 3D 游戏开发实战
DirectX 12 3D 游戏开发实战
Python和NLTK自然语言处理
Python和NLTK自然语言处理
scikit-learn机器学习(第2版)
scikit-learn机器学习(第2版)
C++编程自学宝典
C++编程自学宝典
数据科学实战手册(第2版)
数据科学实战手册(第2版)
Scala实用指南
Scala实用指南

相关文章

相关课程