3.6本章小结 78
第4章 千里之行,始于足下—3D开发基础知识 79
4.1 OpenGL ES简介 79
4.1.1师出名门的OpenGL ES 79
4.1.2三角形组成的世界 80
4.1.3第一个OpenGL ES三角形 82
4.2不同的绘制方式 87
4.2.1点和线的绘制 87
4.2.2索引法绘制三角形 93
4.2.3顶点法绘制三角形 101
4.3不一样的投影,不一样的世界 103
4.3.1正交投影 103
4.3.2透视投影 104
4.3.3两种投影的比较 105
4.3.4近大远小的原理 112
4.4本章小结 114
第5章 愿君多采撷,此物最相思—光照效果的开发 115
5.1五彩缤纷的源泉—光源 115
5.1.1光源的开启及关闭 115
5.1.2设定光源的数量 116
5.1.3定向光 117
5.1.4定位光 118
5.2光源的颜色 119
5.2.1环境光 119
5.2.2散射光 120
5.2.3镜面反射光 121
5.3材料反光属性的法官—法向量及材质 121
5.3.1法向量的作用 121
5.3.2光照的开启及关闭例子 122
5.3.3物体的材质 128
5.3.4设定光源数量的例子 128
5.4两个物体发光的例子 132
5.4.1定位光例子的实现 132
5.4.2自发光物体加运动光源的实现 135
5.4.3 MySurfaceView java详解 137
5.5面法向量与点平均法向量 143
5.5.1面法向量的应用 143
5.5.2点平均法向量的应用 145
5.6本章小结 146
第6章 为伊消得人憔悴—纹理映射 147
6.1 3D世界的花衣—纹理贴图 147
6.1.1指定纹理 147
6.1.2分配纹理坐标 148
6.1.3纹理贴图三角形的实现 149
6.1.4纹理贴图球体的构建 153
6.2使用纹理映射构建地月模型 161
6.2.1浩瀚星空中的地月系 161
6.2.2地月系的案例讲解 162
6.3纹理拉伸 170
6.3.1纹理拉伸的原理与用途 170
6.3.2纹理拉伸案例讲解 172
6.4纹理过滤 175
6.4.1最近点采样 175
6.4.2线性纹理过滤 176
6.4.3 mipmap:多重细节层 176
6.5视角的合理设置 177
6.5.1不同视角的3D世界 177
6.5.2合理视角案例讲解 178
6.6 本章小结 180
第7章 海阔凭鱼跃,天高任鸟飞—3D基本形状的构建 181
7.1圆柱体 181
7.1.1圆柱体的几何方程 181
7.1.2圆柱体的OpenGL ES实现 182
7.2圆锥体 190
7.2.1圆锥体的几何方程 190
7.2.2圆锥体的OpenGL ES实现 190
7.3圆环 193
7.3.1圆环的几何方程 193
7.3.2圆环的OpenGL ES实现 193
7.4抛物面 196
7.4.1抛物面的几何方程 196
7.4.2抛物面的OpenGL ES实现 197
7.5双曲面 199
7.5.1双曲面的几何方程 199
7.5.2双曲面的OpenGL ES实现 200
7.6螺旋面 202
7.6.1螺旋面的几何方程 202
7.6.2螺旋面的OpenGL ES实现 203
7.7本章小结 205
第8章 执子之手,与子偕老—坐标变换 206
8.1理解坐标变换 206
8.1.1坐标变换的实质 206
8.1.2重要的堆栈操作 207
8.2缩放变换 208
8.2.1缩放变换原理分析 208
8.2.2 OpenGL ES中的缩放变换实现 208
8.3平移变换 211
8.3.1平移变换理论概览 211
8.3.2 OpenGL ES中的平移变换实现 212
8.4旋转变换 213
8.4.1旋转变换原理概述 213
8.4.2 OpenGL ES中的旋转变换实现 214
8.5复合变换的简单案例—地月系模型 215
8.6用复合变换模拟现实世界 216
8.7本章小结 218
第9章 孤帆远影碧空尽—摄像机与雾特效 219
9.1摄像机 219
9.1.1摄像机的简介 219
9.1.2摄像机的设置 220
9.2雾特效 221
9.2.1雾特效的相关知识 221
9.2.2雾特效核心代码 222
9.3摄像机与雾特效实现沙漠中的金字塔 222
9.3.1场景部件—四面体和太阳东升西落 223
9.3.2场景部件—星空类 226
9.3.3场景的创建 229
9.3.4摄像机Up方向变换效果 232
9.4本章小结 233
第10章 假作真时真亦假—混合 234
10.1什么是混合 234
10.2源因子和目标因子 235
10.2.1源因子和目标因子的默认实现方式 235
10.2.2预定义常量分析 235
10.2.3常用的组合方式 236
10.2.4启用混合 237
10.3混合案例 237
10.3.1一个混合的简单案例 237
10.3.2带光晕和云层效果的地月系模型 241
10.3.3滤光器中的世界 245
10.4本章小结 250
第11章 蓦然回首,那人却在灯火阑珊处—3D高级技术 251
11.1标志板 251
11.1.1标志板技术概述 251
11.1.2标志板的案例 252
11.2飘扬的旗帜 254
11.2.1旗帜飘动效果原理 254
11.2.2飘扬旗帜案例讲解 255
11.3山地的生成技术 257
11.3.1灰度图地形技术概述 257
11.3.2灰度图生成3D地形 258
11.3.3地形场景效果的提升 261
11.4镜像技术 263
11.4.1镜像技术的简介 264
11.4.2镜像技术的实现 265
11.4.3镜像技术的提升 267
11.5本章小结 268
第12章 心有灵犀一点通—传感器 269
12.1传感器简介 269
12.1.1磁场传感器简介 269
12.1.2光传感器简介 269
12.1.3距离传感器简介 270
12.1.4加速度传感器简介 270
12.1.5姿态传感器简介 271
12.1.6 SensorSimulator模拟器的配置 273
12.2传感器的数据传输 276
12.2.1加速传感器的数据传输 276
12.2.2姿态传感器的数据传输 278
12.3传感器实例—平衡球 279
12.4本章小结 287
第13章 千锤万凿出深山—游戏中的数学与物理 288
13.1必知必会的几何知识 288
13.1.1三维笛卡儿坐标系 288
13.1.2向量 288
13.1.3加减法 290
13.1.4向量的点积 291
13.1.5向量的叉积 291
13.1.6空间平面的确定 292
13.2不可或缺的物理世界 293
13.2.1重力系统 293
13.2.2碰撞 298
13.2.3完全弹性碰撞 299
13.2.4带有能量损失的弹性碰撞 302
13.2.5粒子系统 303
13.3本章小结 311
第14章 山舞银蛇,原驰蜡象—AI基本理念 312
14.1 AI简介 312
14.1.1什么是智能 312
14.1.2什么是游戏AI 312
14.2 AI引擎的基本组成与设计 313
14.2.1智能体 313
14.2.2处理机与感知 314
14.2.3导航 314
14.3游戏AI中图的搜索 315
14.3.1深度优先搜索 315
14.3.2广度优先搜索 321
14.3.3 Dijkstra搜索 325
14.3.4广度优先A*算法的实现 329
14.3.5 Dijkstra A*算法的实现 332
14.3.6 A*与非A*算法之间的比较 334
14.4模糊逻辑 336
14.4.1普通集合 336
14.4.2模糊集合 337
14.4.3模糊语言变量 339
14.4.4模糊规则 339
14.5本章小结 340
第15章 独上高楼,望尽天涯路—开发小秘籍 341
15.1地图设计器 341
15.1.1不可或缺的地图设计器 341
15.1.2简单的地图设计器 341
15.2多键技术 347
15.2.1增加游戏可玩度的多键技术 347
15.2.2多键技术的实例演示 348
15.3虚拟键盘 350
15.4查找表技术 351
15.5状态机 352
15.6 AABB边界框 354
15.6.1 AABB的表达方法 355
15.6.2计算AABB 355
15.6.3 AABB与边界球的比较 356
15.6.4球与球的碰撞 357
15.6.5两个AABB的碰撞 358
15.6.6球与AABB的碰撞 361
15.7穿透效应 363
15.8拾取技术 367
15.8.1拾取技术的原理 367
15.8.2拾取技术的实现 369
15.9天空盒与天空穹 377
15.9.1天空盒的介绍 377
15.9.2天空穹的介绍 380
15.10本章小结 382
第二篇 案例实战 384
第16章 体育类游戏—《疯狂投篮》 384
16.1游戏的背景及功能概述 384
16.1.1背景概述 384
16.1.2功能简介 384
16.2游戏的策划及准备工作 388
16.2.1游戏的策划 388
16.2.2 Android平台下游戏的准备工作 388
16.3游戏的架构 389
16.3.1游戏中用到的主要技术 389
16.3.2各类的简要介绍 389
16.3.3游戏的框架简介 391
16.4游戏公共类的设计与实现 393
16.4.1主类BasketballActivity的实现 393
16.4.2游戏常量类的介绍 396
16.5游戏菜单界面类的设计与实现 398
16.5.1游戏开始菜单的框架设计 398
16.5.2游戏开始菜单的实现 399
16.5.3游戏帮助、关于、加载及结束界面的设计与实现 402
16.6游戏界面的设计与实现 402
16.6.1游戏界面的框架设计 402
16.6.2游戏界面的实现 404
16.7游戏界面中主要场景的绘制及篮球运动 407
16.7.1游戏中墙壁、地板、球和篮板等的绘制 407
16.7.2篮板的整体绘制 409
16.7.3篮球的运动实现 410
16.8游戏界面的碰撞检测及物体拾取 413
16.8.1篮球与篮框的碰撞检测 413
16.8.2篮球与墙壁、地板和屋顶的碰撞检测 416
16.8.3手机屏幕拾取技术 418
16.9游戏的优化与改进 419
第17章 益智类游戏—《旋转积木》 421
17.1游戏的背景及功能概述 421
17.1.1背景概述 421
17.1.2功能简介 421
17.2游戏的策划及准备工作 424
17.2.1游戏的策划 424
17.2.2 Android平台下游戏的准备工作 424
17.3游戏的架构 425
17.3.1游戏中用到的主要技术 425
17.3.2各类的简要介绍 425
17.3.3游戏的框架简介 427
17.4地图设计器的开发 428
17.5游戏公共类的设计与实现 431
17.5.1主类MainActivity的实现 431
17.5.2游戏常量类的介绍 434
17.6游戏菜单界面类的设计与实现 437
17.6.1游戏开始菜单的框架设计 438
17.6.2游戏开始菜单的实现 439
17.6.3游戏帮助、关于、设置及胜利界面的设计与实现 441
17.7游戏界面的设计与实现 442
17.7.1游戏界面的框架设计 442
17.7.2游戏触控方法的实现 443
17.7.3游戏界面的实现 445
17.7.4生成纹理ID的方法 448
17.8游戏界面中主要场景的绘制 449
17.8.1游戏中背景、移表板、图标的绘制 449
17.8.2 地图的绘制 450
17.8.3积木的绘制 451
17.9游戏界面的动画效果 453
17.9.1积木转动的动画效果 453
17.9.2游戏失败、获胜的动画效果 457
17.10游戏界面的碰撞检测 458
17.11游戏的优化与改进 460
第18章 休闲类游戏—《摩天大楼》 461
18.1游戏的背景及功能概述 461
18.1.1背景概述 461
18.1.2功能简介 461
18.2游戏的策划及准备工作 465
18.2.1游戏的策划 465
18.2.2 Android平台下游戏的准备工作 465
18.3游戏的架构 466
18.3.1游戏中用到的主要技术 466
18.3.2各类的简要介绍 467
18.3.3游戏的框架简介 468
18.4游戏公共类的设计与实现 469
18.4.1主类GL Demo的实现 469
18.4.2游戏常量类的介绍 474
18.5游戏菜单界面类的设计与实现 475
18.5.1游戏开始菜单的框架设计 475
18.5.2游戏开始菜单的实现 476
18.5.3游戏帮助、关于、设置、加载及胜利界面的设计与实现 481
18.6游戏界面的设计与实现 481
18.6.1游戏界面的框架设计 481
18.6.2游戏界面的实现 483
18.7游戏界面中主要场景的绘制 487
18.7.1游戏中背景、地板、建筑块的绘制 487
18.7.2树的绘制 487
18.8游戏界面的碰撞检测 488
18.9游戏的优化与改进 492
第19章 动作类游戏—《《 3D空战》 493
19.1游戏的背景及功能概述 493
19.1.1背景概述 493
19.1.2功能简介 494
19.2游戏的策划及准备工作 496
19.2.1游戏的策划 496
19.2.2 Android平台下游戏的准备工作 497
19.3游戏的架构 498
19.3.1游戏中用到的主要技术 498
19.3.2各类的简要介绍 498
19.3.3游戏的框架简介 500
19.4游戏公共类的设计与实现 502
19.4.1主类GL_Demo的实现 502
19.4.2游戏常量类的介绍 503
19.5游戏菜单界面类的设计与实现 504
19.5.1游戏菜单的框架设计 504
19.5.2游戏菜单的实现 506
19.5.3游戏帮助、关于、设置、加载及胜利界面的设计与实现 509
19.6游戏界面的设计与实现 509
19.6.1游戏界面的框架设计 509
19.6.2游戏界面的实现 511
19.7游戏界面中飞机的绘制 513
19.8游戏中的运动线程和碰撞检测 515
19.9游戏的优化与改进 525
第20章 桌面类游戏—《激情台球》 527
20.1游戏的背景及功能概述 527
20.1.1背景概述 527
20.1.2功能简介 527
20.2游戏的策划及准备工作 531
20.2.1游戏的策划 531
20.2.2 Android平台下游戏的准备工作 532
20.3游戏的架构 533
20.3.1游戏中用到的主要技术 533
20.3.2各类的简要介绍 533
20.3.3游戏的框架简介 535
20.4网络端的开发 536
20.4.1服务器的简要介绍 536
20.4.2服务器的代码介绍 537
20.4.3客户端线程的代码介绍 542
20.5游戏公共类的设计与实现 545
20.5.1主类MyActivity的实现 545
20.5.2游戏常量类的介绍 549
20.6 游戏菜单界面类的设计与实现 551
20.6.1游戏开始菜单的框架设计 552
20.6.2游戏菜单的动画实现 555
20.6.3游戏帮助、关于、设置及胜利等界面的设计与实现 556
20.7游戏界面的设计与实现 557
20.7.1游戏界面的框架设计 557
20.7.2游戏中onKeyDown方法的实现 558
20.7.3游戏界面的实现 560
20.8游戏界面中主要场景的绘制 563
20.8.1仪表板、地板的绘制 563
20.8.2台球桌的绘制 564
20.8.3球的绘制 566
20.9游戏中的碰撞检测 567
20.9.1球与球台边角碰撞检测的原理 567
20.9.2球与球碰撞检测的原理 569
20.9.3球与球台边角碰撞检测的实现 570
20.9.4球与球碰撞检测的实现 574
20.9.5球运动线程的实现 576
20.10游戏的优化与改进 578
第21章 射击类游戏—《抢滩登陆》 579
21.1游戏的背景及功能概述 579
21.1.1背景概述 579
21.1.2功能简介 579
21.2游戏的策划及准备工作 583
21.2.1游戏的策划 583
21.2.2 Android平台下游戏的准备工作 583
21.3游戏的架构 584
21.3.1游戏中用到的主要技术 584
21.3.2各类的简要介绍 585
21.3.3游戏的框架简介 588
21.4游戏公共类的设计与实现 589
21.4.1主类Activity的实现 590
21.4.2游戏常量类的介绍 594
21.5游戏菜单界面类的设计与实现 598
21.5.1游戏菜单界面的框架设计 598
21.5.2游戏菜单界面的实现 600
21.5.3游戏帮助、关于及结束界面的设计与实现 604
21.6游戏界面的设计与实现 605
21.6.1游戏界面的框架设计 605
21.6.2游戏界面的实现 607