《3D游戏编程大师技巧 下》PDF下载

  • 购买积分:27 如何计算积分?
  • 作  者:(美)ANDRE LAMOTHE著;李祥瑞,陈武译
  • 出 版 社:北京:人民邮电出版社
  • 出版年份:2012
  • ISBN:9787115282798
  • 页数:1086 页
图书介绍:本书从游戏编程和软件引擎的角度讲解了3D图形学的各个重要主题,主要包括Windows和DirectX编程;与3D游戏开发相关的数学知识;3D图形学;光照、明暗处理、仿射纹理映射、3D裁剪和深度缓存;以及高级3D渲染等技术。

第三部分 基本3D渲染 478

第8章 基本光照和实体造型 478

8.1计算机图形学的基本光照模型 478

8.1.1颜色模型和材质 480

8.1.2光源类型 487

8.2三角形的光照计算和光栅化 493

8.2.1为光照做准备 497

8.2.2定义材质 498

8.2.3定义光源 502

8.3真实世界中的着色 507

8.3.1 16位着色 507

8.3.2 8位着色 507

8.3.3一个健壮的用于8位模式的RGB模型 508

8.3.4一个简化的用于8位模式的强度模型 511

8.3.5固定着色 515

8.3.6恒定着色 517

8.3.7 Gouraud着色概述 533

8.3.8 Phong着色概述 535

8.4深度排序和画家算法 535

8.5使用新的模型格式 540

8.5.1分析器类 540

8.5.2辅助函数 543

8.5.3 3D Studio MAX ASCⅡ格式.ASC 546

8.5.4 TrueSpace ASCⅡ.COB格式 548

8.5.5 Quake Ⅱ二进制.MD2格式概述 557

8.6 3D建模工具简介 558

8.7总结 561

第9章 插值着色技术和仿射纹理映射 562

9.1新T3D引擎的特性 562

9.2更新T3D数据结构和设计 563

9.2.1新的#defines 564

9.2.2新增的数学结构 566

9.2.3实用宏 567

9.2.4添加表示3D网格数据的特性 568

9.2.5更新物体结构和渲染列表结构 574

9.2.6函数清单和原型 577

9.3重新编写物体加载函数 583

9.3.1更新.PLG/PLX加载函数 584

9.3.2更新3D Studio.ASC加载函数 595

9.3.3更新Caligari.COB加载函数 596

9.4回顾多边形的光栅化 601

9.4.1三角形的光栅化 601

9.4.2填充规则 604

9.4.3裁剪 606

9.4.4新的三角形渲染函数 607

9.4.5优化 612

9.5实现Gouraud着色处理 613

9.5.1没有光照时的Gouraud着色 614

9.5.2对使用Gouraud Shader的多边形执行光照计算 624

9.6基本采样理论 632

9.6.1一维空间中的采样 632

9.6.2双线性插值 634

9.6.3 u和v的插值 635

9.6.4实现仿射纹理映射 637

9.7更新光照/光栅化引擎以支持纹理 640

9.8对8位和16位模式下优化策略的最后思考 645

9.8.1查找表 645

9.8.2网格的顶点结合性 646

9.8.3存储计算结果 646

9.8.4 SIMD 647

9.9最后的演示程序 647

Raider 3D Ⅱ 648

9.10总结 651

第10章3D裁剪 652

10.1裁剪简介 652

10.1.1物体空间裁剪 652

10.1.2图像空间裁剪 655

10.2裁剪算法 656

10.2.1有关裁剪的基本知识 657

10.2.2 Cohen-Sutherland裁剪算法 661

10.2.3 Cyrus-Beck/梁友栋-Barsky裁剪算法 662

10.2.4 Weiler-Atherton裁剪算法 665

10.2.5深入学习裁剪算法 667

10.3实现视景体裁剪 667

10.3.1几何流水线和数据结构 669

10.3.2在引擎中加入裁剪功能 670

10.4地形小议 691

10.4.1地形生成函数 692

10.4.2生成地形数据 700

10.4.3沙地汽车演示程序 700

10.5总结 704

第11章 深度缓存和可见性 705

11.1深度缓存和可见性简介 705

11.2 z缓存基础 708

11.2.1z缓存存在的问题 709

11.2.2 z缓存范例 709

11.2.3平面方程法 711

11.2.4 z坐标插值 713

11.2.5z缓存中的问题和1/Z缓存 714

11.2.6一个通过插值计算z和 1/z的例子 715

11.3创建z缓存系统 718

11.4可能的z缓存优化 734

11.4.1使用更少的内存 734

11.4.2降低清空z缓存的频率 734

11.4.3混合z缓存 736

11.5 z缓存存在的问题 736

11.6软件和z缓存演示程序 736

11.6.1演示程序Ⅰ:z缓存可视化 737

11.6.2演示程序Ⅱ: Wave Raider 738

11.7总结 743

第四部分 高级3D渲染 746

第12章 高级纹理映射技术 746

12.1纹理映射——第二波 746

12.2新的光栅化函数 754

12.2.1最终决定使用定点数 754

12.2.2不使用z缓存的新光栅化函数 755

12.2.3支持z缓存的新光栅化函数 758

12.3使用Gouruad着色的纹理映射 759

12.4透明度和alpha混合 765

12.4.1使用查找表来进行alpha混合 766

12.4.2在物体级支持alpha混合功能 778

12.4.3在地形生成函数中加入alpha支持 784

12.5透视修正纹理映射和1/z缓存 786

12.5.1透视纹理映射的数学基础 787

12.5.2在光栅化函数中加入1/z缓存功能 793

12.5.3实现完美透视修正纹理映射 799

12.5.4实现线性分段透视修正纹理映射 803

12.5.5透视修正纹理映射的二次近似 808

12.5.6使用混合方法优化纹理映射 812

12.6双线性纹理滤波 814

12.7 mipmapping和三线性纹理滤波 819

12.7.1傅立叶分析和走样简介 819

12.7.2创建mip纹理链 822

12.7.3选择mip纹理 830

12.7.4三线性滤波 836

12.8多次渲染和纹理映射 837

12.9使用单个函数来完成渲染工作 837

12.9.1新的渲染场境 838

12.9.2设置渲染场境 840

12.9.3调用对渲染场境进行渲染的函数 842

12.10总结 851

第13章 空间划分和可见性算法 852

13.1新的游戏引擎模块 852

13.2空间划分和可见面判定简介 852

13.3二元空间划分 856

13.3.1平行于坐标轴的二元空间划分 857

13.3.2任意平面空间划分 858

13.3.3使用多边形所在的平面来划分空间 858

13.3.4显示/访问BSP树中的每个节点 861

13.3.5 BSP树数据结构和支持函数 863

13.3.6创建BSP树 865

13.3.7分割策略 868

13.3.8遍历和显示BSP树 876

13.3.9将BSP树集成到图形流水线中 886

13.3.10 BSP关卡编辑器 887

13.3.11 BSP的局限性 897

13.3.12使用BSP树的零重绘策略 897

13.3.13将BSP树用于剔除 899

13.3.14将BSP树用于碰撞检测 906

13.3.15 集成BSP树和标准渲染 907

13.4潜在可见集 912

13.4.1使用潜在可见集 913

13.4.2潜在可见集的其他编码方法 914

13.4.3流行的PVS计算方法 915

13.5入口 917

13.6包围体层次结构和八叉树 919

13.6.1使用BHV树 921

13.6.2运行性能 922

13.6.3选择策略 923

13.6.4实现BHV 924

13.6.5八叉树 931

13.7遮掩剔除 932

13.7.1遮掩体 933

13.7.2选择遮掩物 934

13.7.3混合型遮掩物选择方法 934

13.8总结 934

第14章 阴影和光照映射 935

14.1新的游戏引擎模块 935

14.2概述 935

14.3简化的阴影物理学 936

14.4使用透视图像和广告牌来模拟阴影 939

14.4.1编写支持透明功能的光栅化函数 941

14.4.2新的库模块 944

14.4.3简单阴影 945

14.4.4缩放阴影 947

14.4.5跟踪光源 950

14.4.6有关模拟阴影的最后思考 953

14.5平面网格阴影映射 954

14.5.1计算投影变换 954

14.5.2优化平面阴影 957

14.6光照映射和面缓存技术简介 958

14.6.1面缓存技术 960

14.6.2生成光照图 960

14.6.3实现光照映射函数 961

14.6.4暗映射(dark mapping) 963

14.6.5光照图特效 964

14.6.6优化光照映射代码 964

14.7整理思路 965

14.8总结 965

第五部分 高级动画、物理建模和优化 968

第15章3D角色动画、运动和碰撞检测 968

15.1新的游戏引擎模块 968

15.2 3D动画简介 968

15.3 Quake Ⅱ.MD2文件格式 969

15.3.1.MD2文件头 971

15.3.2加载Quake Ⅱ.MD2文件 979

15.3.3使用.MD2文件实现动画 987

15.3.4.MD2演示程序 995

15.4不基于角色的简单动画 996

15.4.1旋转运动和平移运动 997

15.4.2复杂的参数化曲线移动 998

15.4.3使用脚本来实现运动 999

15.5 3D碰撞检测 1001

15.5.1包围球和包围圆柱 1001

15.5.2使用数据结构来提高碰撞检测的速度 1003

15.5.3地形跟踪技术 1003

15.6总结 1004

第16章 优化技术 1005

16.1优化技术简介 1005

16.2使用Microsoft Visual C++和Intel VTune剖析代码 1006

16.2.1使用Visual C++进行剖析 1006

16.2.2分析剖析数据 1008

16.2.3使用VTune进行优化 1009

16.3使用Intel C++编译器 1015

16.3.1下载Intel的优化编译器 1015

16.3.2使用Intel编译器 1015

16.3.3使用编译器选项 1016

16.3.4手工为源文件选择编译器 1017

16.3.5优化策略 1017

16.4 SIMD编程初步 1017

16.4.1 SIMD基本体系结构 1019

16.4.2使用SIMD 1019

16.4.3一个SIMD 3D向量类 1030

16.5通用优化技巧 1036

16.5.1技巧1:消除_ftol() 1036

16.5.2技巧2:设置FPU控制字 1036

16.5.3技巧3:快速将浮点变量设置为零 1037

16.5.4技巧4:快速计算平方根 1038

16.5.5技巧5:分段线性反正切 1038

16.5.6技巧6:指针递增运算 1039

16.5.7技巧7:尽可能将if语句放在循环外面 1039

16.5.8技巧8:支化(branching)流水线 1040

16.5.9技巧9:数据对齐 1040

16.5.10技巧10:将所有简短函数都声明为内联的 1040

16.5.11参考文献 1040

16.6总结 1040

第六部分 附录 1042

附录A光盘内容简介 1042

附录B安装DirectX和使用Visual C/C++ 1044

B.1安装DirectX 1044

B.2使用Visual C/C++编译器 1044

B.3编译提示 1045

附录C三角学和向量参考 1047

C.1三角学 1047

C.2向量 1049

C.2.1向量长度 1050

C.2.2归一化 1050

C.2.3标量乘法 1051

C.2.4向量加法 1052

C.2.5向量减法 1052

C.2.6点积 1053

C.2.7叉积 1054

C.2.8零向量 1055

C.2.9位置向量 1055

C.2.10向量的线性组合 1056

附录D C++入门 1057

D.1 C++是什么 1057

D.2必须掌握的C++知识 1059

D.3新的类型、关键字和约定 1059

D.3.1注释符 1059

D.3.2常量 1060

D.3.3引用型变量 1060

D.3.4即时创建变量 1061

D.4内存管理 1062

D.5流式输入/输出 1062

D.6类 1064

D.6.1新结构 1064

D.6.2一个简单的类 1065

D.6.3公有和私有 1065

D.6.4类的成员函数(方法) 1066

D.6.5构造函数和析构函数 1067

D.6.6编写构造函数 1068

D.6.7编写析构函数 1070

D.7域运算符 1071

在类外部定义成员函数 1071

D.8函数和运算符重载 1072

D.9基本模板 1074

D.10异常处理简介 1075

异常处理的组成部分 1076

D.11总结 1078

附录E游戏编程资源 1079

E.1游戏编程和新闻网站 1079

E.2下载站点 1079

E.3 2D/3D引擎 1080

E.4游戏编程书籍 1080

E.5微软公司的Direct X多媒体展示 1081

E.6新闻组 1081

E.7跟上行业的步伐 1081

E.8游戏开发杂志 1081

E.9 Quake资料 1082

E.10免费模型和纹理 1082

E.11游戏网站开发者 1082

附录F ASCⅡ码表 1083