第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.11Bullet物理引擎概览 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添加刚体进物理世界类Tianj iaBody 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游戏欢迎界面类Welcome View 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