第1部分 预备知识 3
第1章 3D图形学:历史回顾 3
PC机的硬件进展 4
家用游戏机的硬件进展 5
电影的发展 6
DirectX的简要历史 6
OpenGL概述 7
第2章 向量复习课程 9
什么是向量 10
规一化向量 11
向量算术 12
向量点积 13
向量叉积 14
四元数 15
D3DX中的向量 16
总结 18
第3章 矩阵复习课程 19
什么是矩阵 20
单位矩阵 21
旋转矩阵 22
放缩矩阵 22
平移矩阵 22
矩阵连接 23
矩阵与D3DX 24
总结 25
第4章 颜色与光照概要 27
什么是颜色 28
环境光照与放射光照 29
漫反射光照 30
镜面反射光照 31
其他光源类型 33
用Direct3D来汇总一切 34
阴影类型 35
总结 36
第5章 图形管线介绍 37
Direct3D管线 38
顶点数据与高阶表面 39
固定功能的变换与光照阶段 40
顶点着色器 40
裁剪器 41
多重纹理化 41
深度检测、模板检测和alpha检测 42
像素着色器 42
雾化 42
帧缓冲区 43
性能考虑 43
总结 44
第2部分 建立沙箱 47
第6章 设置开发环境和简单的Win32应用程序 47
SDK初探 48
S设置开发环境 49
一个简单的Win32应用程序 50
编译并运行这个简单应用程序 55
回顾:我们为什么那样做 57
总结 57
第7章 创建和管理Direct3D设备 59
什么是Direct3D设备 60
使用Direct3D设备进行渲染 66
清除设备 66
重温Application.h 67
重温Application.cpp 69
总结 75
第8章 一切从顶点开始 79
第3部分 渲染 79
什么是顶点 80
创建顶点 83
销毁顶点缓冲区 85
设置与改变顶点数据 85
渲染顶点 86
性能考虑 88
在屏幕上的某些东西 89
总结 94
第9章 使用变换 95
变换意味着什么 96
世界变换 97
观察变换 97
构建世界与观察变换 98
投影变换 100
变换与D3D设备 102
使用矩阵堆栈 102
视口 103
综合应用 104
建议的练习 108
总结 109
性能考虑 109
第10章 从顶点到几何图形 111
将顶点转化为表面 112
渲染表面 113
加载并渲染.X文件 117
性能考虑 119
源代码 120
总结 131
第11章 固定功能光照 133
D3DLIGHT8结构 134
为光照设置设备 138
应用程序 138
源代码 140
总结 151
第12章 纹理入门 153
纹理——内部的机制 154
创建纹理 157
纹理和顶点 159
纹理和设备 161
高级话题 162
性能考虑 162
应用程序 163
总结 172
第13章 纹理阶段状态 173
设置纹理阶段状态 174
混合与多重纹理化 175
凹凸映射 178
纹理坐标状态 178
纹理过滤和Mip贴图 180
源代码 183
纹理阶段状态与着色器 183
总结 189
第14章 深度检测与Alpha混合 191
深度检测 192
Alpha混合(Alpha Blending) 195
Alpha检测 197
性能考虑 197
源代码 198
总结 205
第4部分 着色器 209
第15章 顶点着色器 209
顶点着色器 211
着色器代码 214
混合和写掩码 216
着色器的实现 217
与计算几何图形一起使用着色器 222
与网格一起使用着色器 222
基本着色器 222
性能问题 224
源代码 224
总结 230
第16章 像素着色器 233
什么是像素着色器 234
像素着色器版本 235
像素着色器的输入、输出和操作 236
附属纹理读取 237
指令配对 240
纹理寻址 240
像素着色器的局限与告诫 246
测定像素着色器的支持 247
汇编、创建和使用像素着色器 247
一个非常简单的像素着色器应用程序 248
在顶点着色器中的简单光照 248
在像素着色器中的简单混合 249
简单的像素着色器应用 251
总结 254
第5部分 顶点着色器技术 259
第17章 与网格一起使用着色器 259
基本概念 260
从材质到顶点颜色 261
从顶点颜色到顶点数据 262
性能考虑 263
程序实现 263
总结 270
第18章 顶点着色器的简单与复杂几何操纵 271
沿着法线扩张顶点 272
用正弦波来扭曲顶点 274
程序实现 278
扩展该例子的想法 282
总结 282
第19章 布告板和顶点着色器 285
布告板的基本思想 286
布告板着色器 287
程序实现 291
其他的布告板概念 296
总结 296
第20章 工作在笛卡尔坐标之外 299
笛卡尔坐标系与其他坐标系 300
在顶点着色器中坐标系之间的映射 302
应用程序代码 304
该项技术的应用 310
总结 311
第21章 贝塞尔面片 313
线、曲线以及面片 314
用“微积分”来得到表面法线 317
在着色器中计算面片值 319
贝塞尔应用程序 321
贝塞尔面片的使用和优点 329
连接曲线和面片 330
总结 330
第22章 角色动画——矩阵调色板蒙皮 333
角色动画技术 334
地址寄存器 337
在着色器里的矩阵调色板蒙皮 337
应用程序 339
调色板的其他用途 347
总结 348
第23章 简单的颜色操纵 349
将深度编码到顶点颜色中 350
深度着色器 351
深度编码应用程序 353
X射线着色器 354
X射线应用程序 356
总结 359
第24章 在顶点着色器里实现光照 361
把光源向量转换到物体空间 362
方向光源着色器 365
点光源着色器 367
聚光灯着色器 369
应用程序代码 371
在一个着色器内的多个光源 373
总结 373
第25章 卡通阴影 375
着色器、纹理和复变函数 376
将此方法应用于卡通阴影(第1部分) 378
将此方法应用于卡通阴影(第2部分) 379
将所有一切放到着色器中 380
卡通阴影应用程序 381
关于纹理变化的概念 383
总结 384
关于着色器变化的概念 384
第26章 反射和折射 387
环境映射和立体贴图 388
动态地改变立体贴图 389
计算反射向量 389
计算近似折射向量 391
反射/折射顶点着色器 393
应用程序代码 395
立体贴图的其他使用 400
总结 401
第27章 阴影——平面阴影 403
在平面上投射阴影 404
平面方程 405
阴影矩阵 406
模板缓冲区与阴影 407
平面阴影应用程序 409
局限和改进之处 416
总结 418
第28章 阴影——阴影体 419
阴影体的解释 420
阴影体着色器 426
阴影体应用程序 427
阴影体的优点与缺点 433
总结 435
第29章 阴影——阴影贴图 437
阴影贴图概念 438
将光源视点渲染到纹理 440
纹理映射世界 442
深度比较顶点着色器 444
阴影映射像素着色器 445
阴影贴图应用程序 445
局限与改进 452
总结 453
第6部分 像素着色器技术 457
第30章 逐像素光照 457
简单的光源贴图 458
使用像素着色器的逐像素光照 459
逐像素聚光灯 460
逐像素聚光灯顶点着色器 463
逐像素聚光灯像素着色器 464
逐像素聚光灯应用程序 465
逐像素点光源 467
逐像素点光源顶点着色器 468
逐像素点光源像素着色器 469
逐像素点光源应用程序 469
局限 471
总结 472
第31章 逐像素光照——凹凸映射 475
凹凸映射的概念 476
创建并使用法线贴图 477
创建纹理空间基向量 479
凹凸映射顶点着色器 480
没有像素着色器的凹凸映射 481
凹凸映射像素着色器 487
局限与改进余地 488
总结 489
第32章 用逐像素方式实现的逐顶点技术 491
逐像素反射 492
使用texm3x3pad 493
反射凹凸映射顶点着色器 495
反射凹凸映射像素着色器 496
反射凹凸映射的应用程序 497
逐像素卡通阴影 502
逐像素卡通顶点着色器 502
逐像素卡通像素着色器 503
逐像素卡通的应用程序 506
总结 508
第7部分 其他有用的技术 511
第33章 渲染到纹理——全屏运动模糊 511
创建一个作为渲染目标的纹理 512
从纹理渲染目标获得表面 514
渲染到纹理渲染目标 515
渲染到动态立体贴图 515
运动模糊 517
作为后处理技术的运动模糊 518
运动模糊应用程序 519
性能涵义 526
总结 527
第34章 2D渲染——只是减掉一个“D” 529
放弃DirectDraw的原因 530
丢掉一个“D” 531
精灵——图像就是一切 533
在2D里使用顶点 534
一个非常简单的2D应用程序 536
性能涵义 540
总结 543
可能的扩展 543
第35章 DirectShow:用视频作为纹理 545
DirectShow简述 546
我想要我的MP3 548
视频到纹理滤波器的操作 548
准备构建纹理类 551
纹理滤波器类 551
视频纹理应用程序 559
总结 561
第36章 用像素着色器进行图像处理 563
后期处理的优点 564
用像素着色器进行全屏颜色操纵 565
用颜色曲线来操纵颜色 574
用卷积核进行图像处理 579
性能考虑 583
总结 584
第37章 绘制文本的更好方式 585
基本概念 586
程序实现 588
总结 600
第38章 精确的定时 601
低分辨率定时 602
高分辨率定时 603
关于动画的一般说法 604
程序实现 605
总结 608
第39章 模板缓冲区 609
模板缓冲区和模板检测的目的 610
模板缓冲区的渲染状态 611
模板化的狙击区域 614
总结 619
第40章 拾取:实际拾取过程的更多介绍 621
非常简单的2D拾取 622
光线拾取 624
采用光线拾取的地形跟踪 626
照片般完美的逐像素拾取过程 630
逐像素拾取顶点着色器 631
逐像素拾取应用程序 632
逐像素拾取的其他用途 637
性能问题 638
总结 638
索引 641