序篇 逐梦·游戏开发梦想的重量 3
第1章 高瞻远瞩——游戏开发面面观 3
1.1 逐梦——梦想让我们不孤单 4
1.1.1 现在的努力,就是为了证明小时候吹过的牛 4
1.1.2 为梦想,为国产游戏的未来,请把这本书读下去 4
1.2 游戏产业的黎明 5
1.3 游戏产业的分类——六大游戏市场 6
1.3.1 3A级游戏开发领域 6
1.3.2 社交和休闲游戏开发领域 8
1.3.3 移动游戏开发领域 9
1.3.4 功能型游戏开发领域 9
1.3.5 学术型游戏开发领域 10
1.3.6 独立型游戏开发领域 10
1.4 游戏平台与游戏开发编程语言的认知 11
1.5 对游戏类型的认知 12
1.6 游戏开发中图形API的概念 14
1.7 游戏编程学习路线总结 15
1.8 章节小憩 16
第一篇 起航·夯实游戏程序之根 19
第2章 开锋你的绝世名刃——Visual Studio开发环境的安装、配置 19
2.1 Visual Studio、VC++和C++的那些事儿 20
2.2 Visual Studio 2010的下载、安装与配置 21
2.2.1 下载Visual Studio 2010 21
2.2.2 安装Visual Studio 2010 22
2.2.3 初次配置Visual Studio 2010 25
2.2.4 Visual Studio 2010常用设置介绍 26
2.3 Visual Studio 2010使用指南 27
2.3.1 集成开发环境简介 27
2.3.2 Visual Studio界面概述 28
2.3.3 工具栏选项 29
2.4 百科全书——帮助文档与MSDN 30
2.4.1 MSDN的安装 31
2.4.2 离线查看MSDN的方法 33
2.4.3 使用MSDN帮助文档 34
2.5 Coding路上不孤单——强大的编程助手Visual AssistX 34
2.6 长征第一步——第一个程序的创建与编写 36
2.6.1 关于项目与解决方案 36
2.6.2 第一个程序的创建与编写 37
2.6.3 Visual Studio文件类型分析 41
2.7 章节小憩 42
第3章 启程——Windows编程基础 43
3.1 高瞻远瞩——Windows编程体系与游戏编程 44
3.2 理解两个术语——API与SDK 45
3.2.1 何为API 45
3.2.2 什么是SDK 46
3.3 Windows程序的“心脏”——WinMain函数 46
3.3.1 WinMain函数 46
3.3.2 MessageBox函数 49
3.3.3 PlaySound函数 51
3.3.4 示例程序Firstblood! 52
3.4.Windows程序的“外貌”——窗口 55
3.5 Winodows资源的“身份证”——句柄 55
3.6 Windows程序的“邮局”——消息与消息队列 56
3.6.1 消息的表示形式——MSG结构体 56
3.6.2 关于消息队列 58
3.7 步步为营——窗口创建四步曲 58
3.7.1 窗口类的设计 58
3.7.2 窗口类的注册 63
3.7.3 窗口的正式创建 64
3.7.4 窗口的显示和更新 66
3.8 各有千秋——两套消息循环体系 68
3.8.1 以GetMessage为核心的消息循环体系 69
3.8.2 以PeekMessage为核心的消息循环体系 71
3.9 Windows程序的“中枢神经”——窗口过程函数 73
3.10 做好善后——窗口类的注销 75
3.11 牛刀小试——一个完整的窗口程序的诞生 76
3.1 2小不忍则乱大谋——关于命名规范 80
3.1 3章 节小憩 82
第二篇 初探·GDI2D游戏编程 85
第4章 入门心法——Windows游戏图形基础 85
4.1 Windows图形设备接口(GDI) 86
4.1.1 GDI的初印象 86
4.1.2 用GDI写游戏的认知 86
4.1.3 关于GDI+ 87
4.1.4 GDI的特点 87
4.1.5 GDI中的基本图形 88
4.1.6 GDI的函数分类 89
4.2 设备环境(DC) 90
4.2.1 设备环境的基本概念 90
4.2.2 获取设备环境句柄(HDC)的两种方式 91
4.3 Windows屏幕区域相关概念阐述 94
4.3.1 屏幕区、窗口区与客户区 94
43.2 坐标点与坐标变换 94
4.4 写一个GDI程序通用框架 95
4.5 GDI基本几何绘图 100
4.5.1 创建画笔 100
4.5.2 创建画刷 101
4.5.3 图形对象的选择 102
4.5.4.绘制图形和线条 103
4.6 游戏随机数系统初步 105
4.6.1 游戏中的随机系统概述 105
4.6.2 随机系统初步 106
4.6.3 几种随机数的简单算法 108
4.6.4 产生一定范围内随机数的通用算法公式 109
4.6.5 总结 109
4.6.6 示例程序GDIdemo1 110
4.7 文字的输出 113
4.7.1 最常用文字输出函数TextOut 114
4.7.2 进阶文字输出函数 114
4.7.3 设置文字颜色 115
4.7.4 设置文字背景透明 116
4.7.5 字体的创建 116
4.7.6 总结 117
4.7.7 示例程序GDIdemo2 119
4.8 位图绘制基础 120
4.8.1 位图绘制四步曲 121
4.8.2 示例程序GDIdemo3 125
4.9 消除闪烁:缓冲显示技术 127
4.10 章 节小憩 128
第5章 遮羞的艺术——Windows游戏绘图技巧 129
5.1 透明贴图的两套体系 130
5.2 透明遮罩法 130
5.2.1 具体实现细节 131
5.2.2 示例程序GDIdemo4 134
5.3 透明色彩法 137
5.3.1 具体实现细节 137
5.3.2 示例程序GDIdemo5 139
5.4 自己动手处理图片素材 141
5.4.1 游戏素材的来源 142
5.4.2 Photoshop图像处理软件 142
5.4.3 处理游戏素材图片 143
5.5 章节小憩 150
第6章 光与影的交汇——Windows游戏动画技术 151
6.1 定时器动画显示 152
6.1.1 创建定时器 152
6.1.2 WM TIMER消息响应 153
6.1.3 删除定时器 154
6.1.4 示例程序GDIdemo6 155
6.2 游戏循环动画显示 161
6.3 透明动画 165
6.4 排序贴图 169
6.5 章节小憩 175
第7章 做游戏的主人——Windows游戏输入消息处理 176
7.1 Windows键盘消息处理 177
7.1.1 虚拟键码与键盘消息 177
7.1.2 键盘消息处理 181
7.1.3 示例程序GDIdemo10 182
7.2 Windows鼠标消息处理 187
7.2.1 鼠标消息的处理方式 187
7.2.2 鼠标相关常用函数讲解 189
7.3 章节小憩 199
第8章 玄妙的物理——物理建模与粒子系统初步 201
8.1 基础物理建模初步 202
8.1.1 匀速与加速运动模拟 202
8.1.2 重力系统模拟 207
8.1.3 摩擦力系统模拟 210
8.2 粒子系统初步 214
8.2.1 基本概念 214
8.2.2 雪花飞舞示例程序 215
8.2.3 星光绽放示例程序 219
8.3 章节小憩 224
第9章 梦的初现——开发回合制游戏《勇者斗恶龙》 225
9.1 设计游戏登场角色 226
9.2 设计主角角色技能 228
9.2.1 “无敌斩”角色技能设计 228
9.2.2 “烈火剑法”角色技能设计 228
9.2.3 “气疗术”角色技能设计 229
9.2.4 “恩赐解脱”角色技能设计 229
9.3 设计反派角色技能 230
9.3.1 人工智能技术一瞥 230
9.3.2 反派人物AI的设计 232
9.3.3 “幽冥鬼火”反派技能设计 233
9.3.4 “嗜血咒”反派技能设计 233
9.3.5 “致命一击”反派技能设计 234
9.3.6 “使用梅肯斯姆”反派技能设计 234
9.4 书写游戏程序实现代码 235
9.4.1 游戏资源的初始化 235
9.4.2 功能函数的实现 238
9.4.3 游戏主体部分的实现 240
9.4.4 游戏窗口过程函数的实现 244
9.4.5 玩家动作逻辑与技能特效绘图函数的实现 245
9.4.6 反派动作逻辑与绘图函数的实现 248
9.5 整合代码,完成游戏开发 251
9.6 玩游戏 269
9.7 游戏打法攻略、改进与素材 271
9.8 章节小憩 272
第三篇 飞跃·DirectX游戏编程基础 275
第10章 快到碗里来——DirectX大局观认知 275
10.1 对DirectX的认知 276
10.1.1 DirectX的目前地位 276
10.1.2 DirectX的两种不同含义 277
10.1.3 DirectX的几套开发方案 278
10.1.4 图形API体系认知 278
10.1.5 微软的宠儿——DirectX 279
10.1.6 不甘做备胎——OpenGL 279
10.2 宿敌的世纪之斗:DirectX与OpenGL的博弈 280
10.3 DirectX开发环境的配置 282
10.4 新版DirectX SDK的组件介绍 286
10.4.1 新版DirectX SDK中现存的组件 286
10.4.2 新版DirectX SDK中被移除的组件 288
10.4.3 关于当前2D游戏开发可用的图形API 289
10.5 对DirectX SDK文件组成的剖析 289
10.6 让DirectX SDK物尽其用 294
10.7 选择我们的DirectX学习版本 295
10.7.1 DirectX的几套版本简介 295
10.7.2 DirectX11 vs DirectX9,现阶段学哪个好 295
10.8 当前Direct3D中的两套渲染体系 297
10.9 Direct3D程序的体系结构 298
10.10 学习DirectX的两个技巧 300
10.11 章 节小憩 300
第11章 三维内功心法——Direct3D编程基础 301
11.1 典型Direct3D程序流程分析 302
11.2 对COM接口对象的一些介绍 303
11.3 写一个DirectX程序通用框架 304
11.4 化腐朽为神奇——Direct3D初始化四步曲 310
11.4.1 Direct3D初始化四步曲概述 310
11.4.2 Direct3D初始化四步曲之一:创接口 310
11.4.3 Direct3D初始化四步曲之二:取信息 311
11.4.4 Direct3D初始化四步曲之三:填内容 313
11.4.5 Direct3D初始化四步曲之四:创设备 315
11.4.6 Direct3D初始化四步曲代码赏析 316
11.4.7 示例程序D3Ddemo1 317
11.5 深入理解Direct3D动画显示技术——交换链 319
11.6 对固定功能渲染流水线体系的理解 321
11.7 Direct3D中的“绘制金钥匙”——Direct3D设备接口 322
11.8 Direct3D中二维文本的绘制 323
11.8.1 D3DXCreateFont函数 324
11.8.2 DrawText函数 325
11.9 起承转合的艺术:Direct3D渲染五步曲 326
11.9.1 Direct3D渲染五步曲概述 326
11.9.2 五步曲之一:清屏操作 327
11.9.3 五步曲之二:开始绘制 329
11.9.4 五步曲之三:正式绘制 329
11.9.5 五步曲之四:结束绘制 330
11.9.6 五步曲之五:翻转显示 330
11.9.7 Direct3D渲染五步曲代码整体赏析 331
11.9.8 示例程序D3Ddemo2 331
11.10 章 节小憩 337
第12章 腾飞前的助跑——Direct3D绘制基础 338
12.1 顶点缓存的逆袭 339
12.1.1 引言 339
12.1.2 顶点缓存相关基础知识 339
12.1.3 顶点缓存使用四步曲之一:设计顶点缓存 340
12.1.4 顶点缓存使用四步曲之二:创建顶点缓存 342
12.1.5 顶点缓存使用四步曲之三:访问顶点缓存 345
12.1.6 顶点缓存使用四步曲之四:图形的绘制 347
12.1.7 示例程序D3Ddemo3 350
12.2 索引缓存——顶点缓存的红颜知己 354
12.2.1 引言 354
12.2.2 索引缓存的使用思路 356
12.2.3 相濡以沫的顶点缓存与索引缓存 357
12.2.4.双剑合璧:顶点缓存、索引缓存使用四步曲 359
12.2.5 示例程序D3Ddemo4 367
12.3 章节小憩 371
第13章 迈向三维世界——Direct3D的四大变换 372
13.1 四大变换的基本认知 373
13.2 四大变换之一:世界变换 373
13.2.1 矩阵的平移 375
13.2.2 矩阵的旋转 376
13.2.3 矩阵的缩放 377
13.3 四大变换之二:取景变换 378
13.4 四大变换之三:投影变换 379
13.5 四大变换之四:视口变换 381
13.6 总结 382
13.7 示例程序D3Ddemo5 382
13.8 章节小憩 389
第14章 绘制出质感的世界——光照与材质 390
14.1 引言 391
14.2 四大光照类型 391
14.3 三大光源类型 393
14.4 材质 398
14.5 关于顶点法线 399
14.6 总结与升华 402
14.7 几何体的快捷绘制 402
14.7.1 D3D中内置的几何体概述 402
14.7.2 D3D中几种内置的几何体绘制四步曲 403
14.7.3 D3D 中几种内置几何体的创建 404
14.8 示例程序D3Ddemo7 415
14.9 章节小憩 420
第15章 做游戏的主人——输出控制利器Directlnput 421
15.1 引言 422
15.2 Directlnput接口概述 422
15.3 Directlnput使用步骤详解 424
15.3.1 头文件和库文件的包含 424
15.3.2 创建Directlnput接口和设备 424
15.3.3 设置数据格式 427
15.3.4 设置协作级别 427
15.3.5 设置特殊属性 428
15.3.6 获取和轮询设备 429
15.3.7 读取设备信息 429
15.4 精炼:Directlnput使用五步曲 431
15.5 Directlnput键盘按键键值总结 433
15.6 Directlnput鼠标按键键值总结 434
15.7 示例程序D3Ddemo8 435
15.8 手把手封装Directlnput到类中 440
15.9 封装好的Directlnput类的使用 444
15.10 示例程序D3Ddemo9 445
15.11 章节小憩 451
第16章 起舞不落幕——与纹理映射的华丽邂逅 452
16.1 纹理映射的概念 453
16.2 纹理映射使用四步曲 454
16.3 总结与升华 459
16.4 示例程序D3Ddemo10 461
16.5 四大纹理过滤方式精讲 472
16.6 四大纹理寻址方式精讲 477
16.7 纹理映射知识总结 480
16.8 示例程序D3Ddemo11 483
16.9 章节小憩 489
第17章 他山之石可攻玉——三维游戏模型的载入 490
17.1 网格模型技术的前生今世 491
17.2 认识三维建模软件3DS Max和Maya 491
17.3 对X文件的认识 494
17.4 从3DS Max中导出X文件方法详解 495
17.5 网格模型接口ID3DXMESH 498
17.6 文件模型载入三步曲 500
17.6.1 三步曲之一:通过×文件加载网格模型 500
17.6.2 三步曲之二:载入材质和纹理 501
17.6.3 三步曲之三:绘制网格模型 502
17.6.4 总结与升华 504
17.7 示例程序D3demo12 505
17.8 章节小憩 510
第18章 水乳交融的艺术——Alpha混合技术 511
18.1 初识Alpha通道与混合技术 512
18.2 Direct3D中的融合套路——融合因子 512
18.3 融合运算方式的取法 513
18.4 融合因子的取法 514
18.5 Alpha的三处来源 515
18.6 Alpha融合使用三步曲 517
18.7 示例程序D3Ddemo13 518
18.8 章节小憩 521
第19章 横看成岭侧成峰——深度测试与Z缓存 522
19.1 形象化理解深度测试 523
19.2 深度测试相关概念讲解 523
19.3 深度测试使用四步曲 524
19.4 示例程序D3Ddemo14 527
19.5 章节小憩 529
第20章 虚实结合的光影——模板技术 530
20.1 对模板技术中概念的理解 531
20.1.1 模板缓存 531
20.1.2 模板测试 531
20.2 模板测试精细讲解 532
20.2.1 创建模板缓冲区 532
20.2.2 清除模板缓冲区 533
20.2.3 模板测试相关参数介绍 534
20.2.4 对模板测试的一些理解 537
20.3 镜面特效的实现 538
20.4 通过实例程序讲解 539
20.5 示例程序D3Ddemo15 543
20.6 章节小憩 548
第四篇 致用·DirectX游戏编程应用 551
第21章 翱翔于三维空间——游戏摄像机的构建 551
21.1 对摄像机的一些概述 552
21.2 开始设计摄像机类 552
21.3 关于向量计算的函数讲解 555
21.4 计算取景变换矩阵 557
21.5 类的其余实现细节 560
21.6 示例程序D3Ddemo16 566
21.7 章节小憩 574
第22章 钟灵毓秀的世界——三维地形的构建 575
22.1 三维地形绘制思路分析 576
22.2 关于高度图 577
22.2.1 高度图的概念 577
22.2.2 高度图的制作 578
22.2.3 用Photoshop制作高度图 579
22.2.4 在程序中读取高度图 581
22.3 地形类轮廓的书写 582
22.4 地形顶点的计算 583
22.5 地形索引的计算 585
22.6 渲染出地形 587
22.7 完成地形类的设计 588
22.8 示例程序D3Ddemo17 592
22.9 章节小憩 597
第23章 向碧蓝的苍穹致敬——三维天空的构建 598
23.1 三维天空技术阐述 599
23.2 天空盒的设计 600
23.3 天空盒类的实现 603
23.4 天空盒类的使用 609
23.5 示例程序D3Ddemo18 609
23.6 章节小憩 615
第24章 让唯美的雪花飘扬——三维粒子系统的实现 616
24.1 对粒子系统的基本认知 617
24.2 粒子系统的基本原理 618
24.3 雪花粒子系统的设计 620
24.4 雪花粒子系统的实现 623
24.5 雪花飞扬粒子类的使用 628
24.6 示例程序D3Ddemo19 629
24.7 章节小憩 635
第25章 造物主的降临——多游戏模型的载入 636
25.1 网格模型的优化 637
25.2 网格模型的克隆 639
25.3 文件模型载入类的设计 640
25.4 文件模型载入类的实现 641
25.5 文件模型载入类的使用 645
25.6 示例程序D3Ddemo20 646
25.7 章节小憩 652
第五篇 升华·致我们的游戏开发梦想 655
第26章 站在巨人肩膀上——游戏引擎技术导论 655
26.1 游戏引擎的起源、意义和概念 656
26.1.1 游戏引擎的起源和意义 656
26.1.2 游戏引擎的概念理解 656
26.1.3 一款完善的游戏引擎的构成 657
26.1.4 DirectX与游戏引擎的区别 657
26.2 人气开源游戏引擎介绍 657
26.3 游戏引擎排名的权威榜单一瞥 659
26.4 优秀的免费/开源第一人称射击游戏介绍 661
26.5 关于游戏引擎的一些思考 664
26.6 市面上各类游戏引擎完全列举 665
附录A进阶游戏编程书籍总结与推荐 668
A.1 零基础游戏编程学习大体阶段概括 669
A.2 Windows游戏编程入门书籍推荐 670
A.3 游戏编程进阶书籍推荐 670
A.3.1 DirectX入门 670
A.3.2 地形方面 671
A.3.3 物理方面 671
A.3.4 数学方面 672
A.3.5 引擎设计方面 672
A.3.6 实时渲染方面 673
A.3.7 图形学方面 673
A.3.8 Al方面 673
A.3.9 网络方面 674
A.3.10 系列书籍方面 674
A.3.11 策划方面 675
A.3.12 美工方面 675
A.3.13 小说&电影 675
A.3.14 其他 676
A.4 开源游戏源代码推荐 676
后记 总有一天你将破蛹而出 678