第一部分 基础篇 3
第1章 XNA概述与简介 3
1.1 XNA发展史 3
1.2 XNA的优势 4
1.3 安装XNA Game Studio 4
1.4 第一个XNA程序 6
1.4.1 创建最简单的XNA程序 6
1.4.2 项目EmptyProject的代码诠释 8
1.5 完善EmptyProject 9
1.5.1 显示鼠标 9
1.5.2 允许改变窗口大小 10
1.5.3 响应键盘退出程序 10
1.5.4 图形设备的获取 10
1.6 全屏显示 11
1.7 小结 12
第2章 二维图形与字体 13
2.1 初探素材管线(Content Pipeline) 13
2.1.1 素材管线的使用 13
2.1.2 素材管线的实现 14
2.2 简单二维图形的加载和渲染 14
2.2.1 添加图片 14
2.2.2 加载图片 15
2.2.3 渲染二维图片 16
2.3 渲染多幅图片 17
2.4 二维图片的旋转、缩放、镜像与裁剪 19
2.4.1 图片原点与绘制原点 19
2.4.2 旋转 20
2.4.3 缩放 21
2.4.4 镜像 21
2.4.5 裁剪 23
2.5 图层与透明渲染技术 23
2.5.1 图层与类SpriteBatch的Begin()重载函数 23
2.5.2 透明渲染 24
2.6 字体 26
2.6.1 英文字体 26
2.6.2 中文字体 27
2.7 小结 29
第3章 三维图形基础 30
3.1 BasicEffect类 30
3.1.1 创建类BasicEffect的对象 30
3.1.2 BasicEffect对象的使用 31
3.2 坐标系 32
3.3 渲染流水线 33
3.4 顶点缓冲区(Vertex Buffer) 33
3.4.1 新建顶点声明与设置顶点数据 34
3.4.2 新建并填充顶点缓冲区 35
3.5 顶点坐标变换 35
3.5.1 世界变换与世界变换矩阵 35
3.5.2 取景变换和取景变换矩阵 38
3.5.3 投影变换和投影变换矩阵 39
3.5.4 视区变换和屏幕坐标系 41
3.6 基本图元 42
3.6.1 点集合 43
3.6.2 线段集合 44
3.6.3 线段条带 44
3.6.4 三角形集合 45
3.6.5 三角形条带 45
3.6.6 三角扇形 46
3.7 索引缓冲区(Index Buffer) 46
3.8 自定义顶点格式 49
3.9 填充模式 51
3.10 小结 52
第4章 HLSL语言与效果 53
4.1 渲染器(Shader) 53
4.2 HLSL数据类型 54
4.2.1 标量 54
4.2.2 向量 55
4.2.3 矩阵 57
4.2.4 纹理 59
4.2.5 复杂数据类型 59
4.3 语义 61
4.4 表达式与运算符 62
4.5 语句 63
4.5.1 语句块 64
4.5.2 返回语句 64
4.5.3 流程控制语句 65
4.6 函数 66
4.6.1 函数声明 66
4.6.2 函数体 67
4.6.3 返回值 68
4.6.4 内部函数 68
4.6.5 构造函数 68
4.7 效果 69
4.7.1 效果、技术与通道 69
4.7.2 使用效果 69
4.8 小结 70
第5章 光照与材质 71
5.1 环境光 71
5.2 漫反射 72
5.3 镜面反射 73
5.4 自发光 74
5.5 光源类型 75
5.6 小结 77
第6章 纹理 78
6.1 纹理映射基础 78
6.1.1 纹理映射基本概念 78
6.1.2 实现纹理映射 80
6.2 纹理过滤模式 82
6.2.1 最近点采样 82
6.2.2 线性纹理过滤 83
6.2.3 各向异性纹理过滤 83
6.2.4 GaussianQuad纹理过滤 84
6.2.5 PyramidalQuad纹理过滤 85
6.3 纹理寻址模式 85
6.3.1 重叠寻址模式 86
6.3.2 镜像寻址模式 86
6.3.3 夹取寻址模式 87
6.3.4 一次镜像寻址模式 87
6.3.5 边框颜色寻址模式 88
6.4 Alpha混合 88
6.5 小结 90
第二部分 XNA开发核心技术第7章 网格模型 93
7.1 三维模型基础 93
7.2 .X文件格式分析 94
7.2.1 首部 95
7.2.2 网格 95
7.2.3 网格材质列表 96
7.2.4 法向量 98
7.2.5 纹理 98
7.2.6 框架和变换矩阵 100
7.2.7 动画 101
7.2.8 蒙皮信息 102
7.3 简易网格模型 103
7.3.1 加载网格模型 103
7.3.2 网格模型结构 104
7.3.3 渲染简易网格模型 107
7.4 骨骼动画网格模型 108
7.4.1 网格模型结构 109
7.4.2 实现骨骼动画 111
7.5 蒙皮骨骼动画网格模型 114
7.5.1 动画数据 115
7.5.2 蒙皮网格模型处理器 119
7.5.3 动画播放器 126
7.5.4 效果文件 133
7.5.5 添加并处理效果材质素材 135
7.5.6 加载、更新和渲染蒙皮网格模型 136
7.6 扩充蒙皮骨骼动画 138
7.7 多动画网格模型 139
7.8 多动画间的平滑过渡 142
7.8.1 成员变量与构造函数 142
7.8.2 开启/切换动画轨道 143
7.8.3 更新关键帧骨骼变换矩阵 144
7.8.4 迭代骨骼变换矩阵 145
7.8.5 计算顶点坐标变换矩阵 146
7.9 关键帧动画 149
7.9.1 关键帧动画原理 150
7.9.2 扩充网格模型处理器、ContentTypeWriter和ContentTypeReader 150
7.9.3 关键帧动画效果文件 153
7.9.4 实现关键帧动画 154
7.10 小结 157
第8章 交互 158
8.1 拾取技术 158
8.1.1 拾取技术基本原理 158
8.1.2 构建观察射线 159
8.1.3 计算观察射线与三角形平面的交点 160
8.1.4 判断交点是否在三角形区域内 162
8.1.5 渲染拾取网格模型 163
8.2 鼠标牵引技术 165
8.2.1 鼠标牵引技术原理 165
8.2.2 鼠标牵引技术实现 166
8.3 第一人称取景变换 168
8.3.1 站在原点,绕上向量旋转 169
8.3.2 站在原点,任意旋转 169
8.3.3 站在任意一点,任意旋转 169
8.3.4 实现第一人称取景变换技术 170
8.3.5 封装第一人称取景摄像机类 172
8.4 三维空间漫游 178
8.4.1 第三人称取景变换 178
8.4.2 跟踪目标点网格模型 182
8.4.3 实现三维空间漫游 187
8.5 三维场景漫游 190
8.5.1 进一步封装跟踪目标模型 190
8.5.2 实现三维场景漫游 197
8.6 渲染探测 199
8.6.1 渲染探测技术简介 200
8.6.2 检测三维空间内任意一点 200
8.6.3 检测静态网格模型 201
8.6.4 检测动态网格模型 202
8.6.5 创建模型边界球 204
8.7 小结 205
第三部分 游戏开发核心技术 209
第9章 声音与视频播放 209
9.1 简易声音播放 209
9.2 单曲循环播放 212
9.3 多曲连续播放 214
9.4 三维声音播放 215
9.5 视频播放 217
9.6 小结 219
第10章 网络 220
10.1 注册网络服务 220
10.1.1 注册账号 220
10.1.2 游戏成员类GameComponent简介 221
10.1.3 添加网络游戏服务成员 221
10.1.4 显示注册界面(Sign In Interface ) 221
10.2 创建网络对话 223
10.2.1 创建网络对话 223
10.2.2 响应网络对话的相关事件 224
10.2.3 更新网络对话 226
10.3 查找并加入网络对话 227
10.3.1 查找活动对话 227
10.3.2 加入活动对话 228
10.3.3 精确查找对话 229
10.4 收发数据 231
10.4.1 发送数据 231
10.4.2 接收数据 232
10.4.3 检测数据的可用性 233
10.4.4 发送数据的SendDataOptions设置 233
10.4.5 多玩家间的数据收发 235
10.5 异步搜索网络对话 238
10.6 进入实际游戏 240
10.7 添加游戏信息 243
10.8 小结 244
第11章 游戏数据的存储与加载 245
11.1 构建整体框架 245
11.2 存储游戏数据 247
11.3 加载游戏数据 249
11.4 小结 250
第四部分 图形开发技术 253
第12章 粒子系统 253
12.1 粒子系统技术简介 253
12.1.1 粒子系统的核心思想和建模原理及优缺点 253
12.1.2 粒子系统基本原理 254
12.2 雨景 255
12.2.1 雨点粒子类 255
12.2.2 雨景粒子系统类 255
12.2.3 雨景的实现 258
12.3 雪景 259
12.3.1 雪花粒子类 259
12.3.2 雪景粒子系统类 259
12.3.3 雪景的实现 264
12.4 喷洒 265
12.4.1 喷洒粒子类 265
12.4.2 喷洒粒子系统类 265
12.4.3 喷洒效果的实现 269
12.5 发射火箭弹到爆炸 270
12.5.1 粒子顶点结构体 270
12.5.2 粒子系统属性设置类 270
12.5.3 粒子系统基类 272
12.5.4 效果 282
12.5.5 各个具体的粒子系统 286
12.5.6 粒子发射类 288
12.5.7 火箭弹类 290
12.5.8 主程序的实现 292
12.6 烟雾排放 294
12.7 火焰 296
12.8 小结 298
第13章 地形 299
13.1 使用高程映射图构建地形的基本原理 299
13.1.1 高程映射图 299
13.1.2 从高程映射图中构建三维地形 300
13.2 地形类Terrain 301
13.2.1 加载构建地形模型的相关数据 301
13.2.2 构建地形网格模型 303
13.3 效果文件 309
13.3.1 多层纹理映射与法向量映射 309
13.3.2 地形效果中的顶点渲染 310
13.3.3 地形效果中的像素渲染 311
13.3.4 管理效果文件类TerrainEffect 313
13.3.5 地形材质类TerrainMaterial 317
13.3.6 设置效果参数 319
13.4 渲染地形网格模型 320
13.5 读取地形高程数据 321
13.6 读取地形法向量数据 323
13.7 射线探测地形 324
13.8 小结 326
第14章 碰撞探测 327
14.1 二维空间碰撞探测 327
14.1.1 矩形碰撞探测 327
14.1.2 矩形像素碰撞探测 331
14.2 三维模型之间的碰撞探测 333
14.2.1 快速探测 333
14.2.2 精细探测 334
14.2.3 射线探测 340
14.2.4 半径探测 343
14.3 地形匹配 344
14.3.1 高程匹配 344
14.3.2 倾斜匹配 349
14.4 小结 354
第15章 后处理 355
15.1 后处理技术的核心思想及关键步骤 355
15.2 后处理程序的基本框架 356
15.2.1 水下效果模拟 356
15.2.2 其他多种特效的实现 360
15.3 阴影 365
15.3.1 阴影效果文件 365
15.3.2 添加阴影效果文件 369
15.3.3 实现阴影 370
15.4 镜面效果 375
15.4.1 镜面技术的核心思想 375
15.4.2 镜面技术主程序的基本实现 375
15.4.3 渲染镜面的效果代码 378
15.4.4 完善 380
15.5 小结 382
第16章 其他简易实用技术 383
16.1 广告板技术(BillBoard) 383
16.1.1 球形广告板 383
16.1.2 柱形广告板 386
16.2 环境映射 388
16.2.1 球形环境映射 388
16.2.2 立方体环境映射 390
16.3 雾化 398
16.3.1 雾化效果实现原理 398
16.3.2 雾化模式 400
16.3.3 雾化效果的实现 400
16.4 光晕 403
16.5 小结 408
第五部分 三维开发技术 411
第17章 综合应用 411
17.1 整体构思 411
17.2 加载素材 411
17.3 创建各个游戏类 413
17.4 统筹各个游戏类 414
17.4.1 添加成员变量 414
17.4.2 初始化 414
17.4.3 加载素材 414
17.4.4 更新 415
17.4.5 渲染 417
17.5 小结 419