高级搜索  |  搜索帮助
最近的浏览历史
购买此书的人还购买过
书  名:DirectX游戏编程
  • 作  者: 冯人果
  • 出版时间: 2010-01-01
  • 出 版 社: 清华大学出版社
  • 字  数: 524 千字
  • 印  次: 1-1
  • 印  张: 24
  • 开  本: 16开
  • ISBN: 9787302215936
  • 装  帧: 平装
  • 定  价:¥45.00
电子书价:¥31.50 折扣:70折 节省:¥13.50 vip价:¥31.50 电子书大小:4.58M
配套资源下载:
  • 名称
  • 说明
  • 权限
  • 文件大小
  • 点击图标下载
  • 图书样章
  • 所有用户
  • 256K
  • 图书课件
  • 教师
  • 7M
  • 网络资源
  • 请通过ftp下载
  • 教师
共有商品评论0条 查看评论摘要
内容简介
  本书主要讲述了利用Direct3D进行图形程序开发的核心技术,从三维向量开始,由浅入深,逐步讲解3D图形编程中的矩阵变换相关知识、投影知识,及视口处理、裁剪处理、深度缓存的应用技术。在高级绘图技术中进一步讲解纹理处理、透明及混合技术的应用、模板的应用、光照及阴影技术、网格的应用、利用网格技术处理模型显示、在Direct3D程序中显示文字、粒子系统的创建及应用。书的后半部分讲解游戏设计的高级特性,如摄像机封装技术、地形显示技术、场景中的模型捡取。最后讲解GPU编程相关的知识,让用户了解高级着色的相关内容。
本书每章都以简单的实例来辅助对知识点的讲解,力求深入浅出,知识由浅入深,难度是逐渐递增的,另外本书的章节之间没有过分紧密的程序连接,所以有一定基础的人员,可以选择需要的章节单独阅读。
本书面向的群体为高校数字媒体艺术程序设计专业的学生,及自考学生,或有一定编程基础的专业图形编程人员。
前言
  这是一本讲述如何使用DirectX 9.0编写交互式三维计算机图形程序的书,重点在游戏开发方面。将讲述关于Direct3D的基础知识,使读者能够进一步地学习和使用更高级的技术。当读者看完这本书的时候,对DirectX就会有一个大体的了解。
从程序员的角度看,DirectX是一个用于开发Windows平台下多媒体应用程序的API (Application Programming Interfaces)函数的集合。
本书重点关注DirectX的一个重要子集——Direct3D。就像名字所描述的,Direct3D是一个用于开发三维应用程序的API的集合。当然本书同时也涉及DirectX的其他内容。
本书主要分为4个部分:第1部分主要介绍贯穿于本书的基本数学概念;第2部分将会介绍基本的3D技术,例如光照、纹理、Alpha混合以及模板缓冲区;第3部分主要讲述如何通过Direct3D去实现多种有趣的技术和应用程序,例如图元选取(Picking)、地形渲染(Terrain Render)、粒子系统(Particle System)、通用虚拟摄像机(Camera)以及如何加载和渲染3D模型(.x文件);第4部分的主题是Vertex Shader、Pixel Shader以及特效框架和新的(在DirectX 9中首次出现)高级Shader语言(HLSL)。
当前和未来的三维计算机游戏会更多地运用Shader技术,所以这是一本与现行图形编程密切相关的书。
1. 对读者的要求
本书属于基础性的图书,但是这并不表示本书适合于没有任何编程经验的读者。本书要求读者了解代数学、几何学的知识,熟悉游戏程序开发环境(例如Visual C++),掌握C++语言以及链表和数组等基本的数据结构知识,如果读者对Windows程序设计具有一定的了解,将更有助于阅读本书,不过这不是必需的。读者可以通过附录A对Windows程序设计有一个简单的认识。
2. 需要的开发工具
本书使用C++语言作为示例的主要编程语言。读者通过阅读DirectX 9.0的帮助文档,可以发现“DirectX 9.0只支持Visual C++ 6.0或者更高版本”。因此,为了使用DirectX 9.0和C++语言开发应用程序,需要拥有Visual C++ 6.0(简称VC 6.0)或者Visual C++ 7.0(.NET)(简称VC 7.0)编程环境。
注意:本书的示例代码都是使用VC 7.0开发和编译的。在大多数情况下,这些代码也可以在VC 6.0中编译和执行。
VC 7.0和VC 6.0会有如下所示的稍许不同。
在VC 7.0中,以下符合语法规则的代码将能编译通过,因为变量cnt将被认为是for循环的局部变量:
int main()
{
for(int cnt=0; cnt<10; cnt++)
{
std::cout << "hello" << std::endl;
}
for(int cnt=0; cnt<10; cnt++)
{
std::cout << "hello" << std::endl;
}
return 0;
}

但是在VC 6.0中,这段程序不能通过编译,它会给出一个错误号为C2374的错误,该错误产生的原因是变量重定义;因为在VC 6.0中,变量cnt不会在for循环中被作为局部变量对待,从而会被多次初始化。因此,当使用VC 6.0时,你可能需要对程序做出一些修改,以避免程序在编译时产生错误。
3. 建议使用的硬件
如果想在一个可以接受的帧数(一般可接受的帧数为25帧/秒)下运行本书的示例,就需要提供一定的硬件支持。
本书所有的例子都可以在REF设备下运行,它用软件模拟了Direct3D提供的功能。但由于使用软件模拟来实现效果,所以运行速度会很慢,我们将在本书第1章讨论REF。
本书第2部分中的示例都是最简单、最基本的,所以可以在一些低端显卡上运行,例如NVIDIA的TNT系列显卡或者同级的显卡。第3部分的示例中将会计算更多的基本图元,并且使用了一些新特性,例如点图元,所以建议使用GeForce2或其同级别的显卡。第4部分将会使用Vertex Shader和Pixel Shader技术,因此为了能实时地运行那些程序,需要一块支持Shader技术的显卡,例如GeForce3。
4. 本书面向的读者
本书主要面对以下的三类读者:
? 中级C++程序员,并想通过最新的Direct3D版本——Direct3D 9.0来了解3D编程技术。
? 三维程序开发人员,使用过除了DirectX之外的其他图形库API(例如OpenGL)并想了解Direct3D。
? 资深的Direct3D程序员,并想了解最新的Direct3D的技术,包括Vertex Shader和Pixel Shader,以及高级Shader语言和特效框架。
5. 安装 DirectX 9.0
如果要编写和执行DirectX 9.0的程序,除了需要安装DirectX 9.0的运行时(RunTime)文件外,还需安装DirectX 9.0的SDK(Software Development Kit,软件开发包)。需要说明的是,在安装DirectX 9.0的SDK的同时,DirectX 9.0的运行时文件会被自动安装。
可以从微软的网站上免费获得DirectX 9.0的SDK。
安装过程非常简单,但是需要提示一点,那就是一旦遇到如下图所示的对话框时,就需要选择Debug选项。


Debug选项会将Debug(调试模式)和Retail(发布模式)版本的所有DirectX动态链接库都安装到用户的计算机中,如果选择Retail选项,那么就只会安装Retail版本的动态链接库文件。因为在开发程序时,Debug版的动态链接库可以在Visual Studio集成开发环境的输出窗口中输出Direct3D相关的调试信息,当然,这时程序需要在debug模式下运行,这些信息对于调试DirectX程序是非常有用的。下图中给出了Direct3D设备没被释放时所显示的错误调试信息。


注意:如果使用Debug版的动态链接库,程序的运行速度会比使用Retail版的动态链接库时慢,所以对于用于商业销售的应用程序,应该附带Retail版本的动态链接库。
6. 设置开发环境
在开发DirectX应用程序的时候,需要创建的工程类型为Win32 Application。
在VC 6.0和VC 7.0中,都需要指定DirectX头文件和库文件的路径,从而使VC开发环境可以找到这些文件。通常情况下DirectX的头文件和库文件的路径为D:\DXSDK\Include 和D:\DXSDK\Lib。
注意:在不同的计算机中,DirectX的安装路径可能不一样,这决定于当初你在安装DirectX SDK时所选择的路径。
一般来说,DirectX SDK安装程序将会自动地将这些路径添加到VC++集成开发环境中。但如果它没有这样做,也可以手动设置:在VC 6.0中选择“工具”→“选择”菜单命令,在弹出的Options对话框中选中Directories(目录)选项卡,然后输入DirectX的头文件和库文件路径,如下图所示。


在VC 7.0中,可以选择“工具”→“选项”菜单命令,在弹出的Options对话框中选择项目中的VC++目录,然后输入DirectX 9.0的头文件和库文件的路径,如下图所示。


接下来,为了能顺利地编译示例程序,需要将D3D9.Lib、D3DX9.Lib和Winmm.Lib链接到工程中。注意Winmm.Lib不是DirectX的库文件,它是Windows多媒体库文件,之所以链接它,是因为要使用到它的时钟函数。
在VC 6.0中可以选择“工程”→“设置”菜单命令,在弹出的Project Settings对话框中选择Link(链接)选项卡,然后输入需要链接的库名,如下图所示。


在VC 7.0中可以选择“项目”→“属性”菜单命令,在弹出的对话框中选择“链接器”→“输入”,然后输入库名,如下图所示。

7. D3DX库的使用
从DirectX 7.0开始,DirectX都会附带一个D3DX库(Direct3D扩展库),该库提供一系列函数、类和接口,可以大大地简化3D图形相关的通用操作,例如数学运算、纹理和图像操作、网格处理以及Shader操作(例如对Shader文件的编译和汇编)。也就是说,D3DX库包含了很多原本需要由开发者自己实现的而且非常繁琐的操作。
在本书中,将始终使用D3DX扩展库所提供的功能,从而可以使读者将精力更多地放在感兴趣的部分。例如,作者不希望浪费太多的篇幅来讲述如何读取各种各样的图片格式(如BMP、JPEG)文件,所以,当需要使用纹理数据的时候,可以通过一个D3DX库函数D3DXCreateTextureFromFile进行纹理数据的加载。一句话,D3DX库使我们的开发更高效,并能更多地关注实际内容,而不是花费大量的时间来改造各种难以继续改进的算法。
使用D3DX库的其他理由如下:
? D3DX库是通用的,可以适用于不同范围的3D应用程序。
? D3DX库的执行效率很高(至少不会慢于同类的图形库)。
? 其他程序员也使用D3DX库。因此,你将会在很多情况下遇到使用D3DX库书写的代码。所以,无论你是否选择使用D3DX库进行开发,都应该掌握它,这样才能读懂别人所写的代码。
? D3DX库所提供的函数使用方便,并经过了长时间的检验。此外,在经过数个版本的DirectX升级之后,它已经变得非常强大,并且具有更多的特性。
8. 使用DirectX文档以及SDK的示例
Direct3D是庞大的API库,作者不能期望在本书中涵盖关于它的所有细节。因此,为了更好地掌握其他信息,必须学会使用DirectX的在线文档。可以通过在DirectX SDK的安装目录DXSDK\Doc\DirectX9中运行DirectX9_c文件来打开DirectX C++在线文档。
DirectX在线的文档涵盖了关于DirectX API的所有内容,所以它是非常好的参考文档,但是由于它的覆盖范围非常大,所以没有比较深入地探讨一些问题,因此它并不是很好的学习工具。但是,随着DirectX不同版本的发布,它将会变得更加完善。
就像前面所说的,文档主要用于参考。假设读者遇到了一个DirectX相关的类型或函数(例如D3DXMatrixInverse),并想对这个函数有更多的了解,这时就可以在帮助文档的索引里进行简单的搜索,从而获得更多的类型信息或者函数信息,如下图所示。


注意:在本书的内容讲解中,将会引导读者在文档中寻找更多的细节。
在DirectX 9对应的开发文档(\DirectX9_c.chm::/directx/graphics/programmingguide/tuto- rialsandsamplesandtoolsandtips/tutorials/tutorials.htm)中还包括了一些介绍性的教程。这些教程是与本书的第2部分的某些主题相对应的。因此建议在学习本书的这部分内容的同时,阅读帮助文档中的这些教程,以得到对同一个问题的更多解释。
值得注意的是,DirectX SDK还附带了一些关于Direct3D的示例程序。这些程序位于DXSDK\Samples\C++\Direct3D目录中。每个示例都示范了怎样在Direct3D中实现某个特效。这些示例对一些图形编程新手来说有相当的难度,但是在读完这本书后你就可以很容易地学习它们了。在学完本书的内容后,下一步最好是学习这些示例。
9. 代码约定
本书的示例所用的代码约定都很简单,但是需要指出两点。
(1) 用下划线标识成员变量。例如:

class C
{
public:
// ...定义公共接口
private:
float _x; // 成员变量以下划线开头
float _y;
float _z;
};

(2) 全局变量和全局函数用大写字母开头,而局部变量和局部函数以小写字母开头。可以通过这些来了解变量或者函数的作用域。
10. 错误处理
一般在本书的示例中不会进行错误处理,因为在讲述一个重要概念和技术的主要代码时,与错误处理相关的代码会分散读者的注意力。也就是说,没有了错误处理代码,示例可以更清楚地示范或讲述一个概念或技术。当你自己的工程中利用本书所提供的代码时,应该加入错误处理的相关代码。
11. 代码清晰度
需要强调一点,在本书示例中代码的书写原则是清晰度第一,性能第二。因此,某些示例程序的执行效率可能不高。如果要在你自己的工程中使用这些代码,可能需要重新编写代码,并使程序的运行效率更高。
12. 示例程序及其他在线功能
本书的中文网站http://www.cngda.com提供了对本书的技术支持。你可以在这个网站上找到本书每一个示例程序的完整代码。建议读者在学习本书各章节的过程中,或者在阅读过这些章节之后学习完整的源代码;一般来说,读者需要花一部分时间来实现每章中的示例。事实上,学习本书的一个好方法是以本书的源代码为参考,然后自己编写实例。
除了示例程序之外,网站还提供了讨论区。我们希望读者可以在网站上交流经验,以及讨论一些仍未明白的问题。在大多数情况下,了解对同一概念的不同看法能加快读者领悟概念的速度。
还计划在网站上添加由于各种原因不适合置于本书中的一些示例程序及教程。如果读者提出对某个特定的概念存在疑问,或对之难以理解,那么针对该问题的额外示例和解释也会被添加到网站上。








丛书编委会




主编单位:北京递归开元教育科技有限公司
主 编:陈 洪
副 主 编:许 影 任 科
编 委:(排名不分先后)
北京理工大学软件学院 丁刚毅
北京工业大学软件学院 蔡建平
西南交通大学软件学院 景 红
上海第九城市信息技术有限公司 黄雪斌
巨人网络集团有限公司 邓 昆
目标软件(北京)有限公司 毛海滨
腾讯公司 姚晓光
文睿信息研究中心 王 涛
创游传媒 孙 辉
中国文化创意产业技术创新联盟 高东旭
北京递归开元教育科技有限公司 黄 昆

目录
第1部分 必备的数学知识

第1章 基本的数学概念 3
1.1 三维空间中的向量 3
1.1.1 向量的相等 6
1.1.2 向量模的计算 7
1.1.3 向量归一化 8
1.1.4 向量加法 8
1.1.5 向量减法 9
1.1.6 数乘 10
1.1.7 点乘 10
1.1.8 叉乘 11
1.2 矩阵 12
1.2.1 矩阵的相等、矩阵数乘和
矩阵加法 13
1.2.2 矩阵乘法 13
1.2.3 单位矩阵 15
1.2.4 逆矩阵 15
1.2.5 矩阵的转置 16
1.2.6 D3DX中的矩阵 16
1.2.7 基本变换 19
1.2.8 平移变换 20
1.2.9 旋转矩阵 21
1.2.10 缩放矩阵 23
1.2.11 组合变换 23
1.2.12 一些用于向量变换的
函数 25
1.3 平面 25
1.3.1 D3DX中的平面 26
1.3.2 点和平面之间的关系 27
1.3.3 构建平面 27
1.3.4 标准化一个平面 28
1.3.5 对平面进行变换操作 29
1.3.6 求到一个指定点距离最短的
平面上的点 29
1.4 射线 30
1.4.1 射线的表达式 30
1.4.2 射线与平面的相交 31
1.5 小结 31


第2部分 Direct3D基础知识

第2章 Direct3D初始化 35
2.1 Direct3D体系结构 35
2.1.1 REF设备 36
2.1.2 D3D设备类型 36
2.2 组件对象模型 37
2.3 预备知识 37
2.3.1 表面缓冲区(Surface) 37
2.3.2 重采样 39
2.3.3 像素格式 40
2.3.4 存储池 40
2.3.5 交换链和页面翻转 41
2.3.6 深度缓冲区 42
2.3.7 顶点处理 43
2.3.8 设备性能 43
2.4 初始化Direct3D 44
2.4.1 获得IDirect3D9接口 45
2.4.2 确认硬件顶点处理能力 45
2.4.3 填充D3DPRESENT_
PARAMETERS结构 46
2.4.4 创建一个IDirect3DDevice9
接口 48
2.5 示例:初始化Direct3D 49
2.5.1 d3dUtility.h/cpp文件 50
2.5.2 程序框架 52
2.5.3 D3D初始化示例 52
2.6 小结 55
第3章 渲染管道 57
3.1 描述的模型 57
3.1.1 顶点格式 58
3.1.2 三角形 59
3.1.3 索引 60
3.2 虚拟摄像机 60
3.3 渲染管道 61
3.3.1 本地空间 62
3.3.2 世界空间 62
3.3.3 视图空间 63
3.3.4 背面裁剪 65
3.3.5 光照 66
3.3.6 裁剪 66
3.3.7 投影 67
3.3.8 视口变换 69
3.3.9 光栅化 70
3.4 小结 70
第4章 在Direct3D中绘制图形 71
4.1 顶点/索引缓冲区 71
4.1.1 创建顶点缓冲区和
索引缓冲区 71
4.1.2 访问缓冲区内存 74
4.1.3 获得顶点缓冲区以及索引
缓冲区的相关信息 75
4.2 渲染状态 76
4.3 渲染前的准备工作 77
4.4 使用顶点/索引缓冲区进行渲染 78
4.4.1 IDirect3DDevice9::
DrawPrimitive 78
4.4.2 IDirect3DDevice9::
DrawIndexedPrimitive 78
4.4.3 Begin/End Scene 80
4.5 D3DX自带的几何物体 80
4.6 示例:三角形、立方体、
茶壶、D3DXCreate* 81
4.7 小结 85
第5章 颜色 87
5.1 颜色的描述方法 87
5.2 顶点颜色 90
5.3 着色处理 90
5.4 示例:带颜色的三角形 91
5.5 小结 93
第6章 光照 95
6.1 光的组成 95
6.2 材质 96
6.3 顶点法线 98
6.4 光源 100
6.5 示例:光照 104
6.6 其他例子 106
6.7 小结 107
第7章 纹理 109
7.1 纹理坐标 109
7.2 创建并应用纹理 111
7.3 纹理过滤 112
7.4 多纹理映射 113
7.4.1 多纹理映射过滤 113
7.4.2 在Direct3D中使用多纹理
映射 114
7.5 纹理坐标寻址模式 114
7.6 程序示例:带纹理的四边形 116
7.7 小结 118
第8章 混合技术 119
8.1 混合方程 119
8.2 混合因子 121
8.3 透明 121
8.3.1 Alpha通道 122
8.3.2 指定源像素的Alpha值 122
8.4 用DirectX的纹理工具创建Alpha
通道 123
8.5 示例:透明效果 124
8.6 小结 127
第9章 模板缓冲区 129
9.1 使用模板缓冲区 130
9.1.1 获取模板缓冲区 131
8.1.2 模板测试 131
9.1.3 模板测试的控制 131
9.1.4 更新模板缓冲区 133
9.1.5 模板写入掩码 134
9.2 示例:镜子 134
9.2.1 镜面反射的相关数学知识 134
9.2.2 镜面效果的实现概述 136
9.2.3 代码和解释 137
9.3 示例:平面阴影 140
9.3.1 平行光阴影 141
9.3.2 点光源阴影 142
9.3.3 阴影矩阵 142
9.3.4 用模板缓冲区来防止
二次混合 143
9.3.5 代码和解释 144
9.4 小结 146


第3部分 Direct3D的应用

第10章 文字处理 149
10.1 ID3DXFont、ID3DXFont接口 149
10.1.1 创建一个ID3DXFont
接口 149
10.1.2 文字输出 150
10.1.3 计算帧速(FPS) 151
10.2 CD3DFont、CD3DFont类 152
10.2.1 构造CD3DFont对象 152
10.2.2 DrawText输出文字 153
10.2.3 销毁CD3DFont对象 153
10.3 三维网格(3D Mesh)在文字显示中的
应用 154
10.3.1 D3DXCreateText方法 154
10.4 小结 155
第11章 网格(1) 157
11.1 几何信息 157
11.2 网格子集(Subset)和属性缓冲区 158
11.3 网格的渲染 160
11.4 网格优化 160
11.5 网格属性表 162
11.6 邻接信息 164
11.7 网格的克隆(Cloning) 165
11.8 网格的创建
(D3DXCreateMeshFVF) 166
11.9 示例:创建并渲染一个网格 168
11.10 小结 173
第12章 网格(2) 175
12.1 ID3DXBuffer接口 175
12.2 .X文件 176
12.2.1 读取.X文件 177
12.2.2 X文件中的材质 178
12.2.3 X文件实例 178
12.2.4 生成顶点法线 181
12.3 渐进式网格 182
12.3.1 生成渐进式网格 183
12.3.2 顶点属性权重 184
12.3.3 ID3DXPMesh接口的
相关方法 185
12.3.4 示例:渐进式网格 186
12.4 包围体 189
12.4.1 新的常量 191
12.4.2 各种不同的包围体 191
12.4.3 包围体示例 192
12.5 小结 194
第13章 构建一个灵活的摄像机类 195
13.1 设计摄像机 195
13.2 摄像机类的实现细节 197
13.2.1 计算视图矩阵 197
13.2.2 绕任意轴的旋转 200
13.2.3 俯仰、偏转和翻滚 200
13.2.4 行走、平移和飞行 203
13.3 示例:摄像机 204
13.4 小结 206
第14章 基本地形渲染 207
14.1 高度图 208
14.1.1 高度图的创建 208
14.1.2 读取RAW文件 209
14.1.3 高度图的访问和修改 210
14.2 生成地形几何数据 210
14.2.1 计算顶点 212

14.2.2 计算索引——
定义三角形 214
14.3 纹理 216
14.3.1 用程序生成纹理数据 216
14.4 光照 218
14.4.1 概述 219
14.4.2 计算方格的阴影 219
14.4.3 计算地形阴影 221
14.5 在地形上“行走” 221
14.6 Terrain示例程序 225
14.7 一些改进措施 226
14.8 小结 227
第15章 粒子系统 229
15.1 粒子和点精灵 229
15.1.1 结构格式 230
15.1.2 Point Sprite渲染状态 230
15.1.3 粒子及其属性 232
15.2 粒子系统组件 233
15.2.1 粒子系统的渲染 238
15.2.2 粒子的随机性 241
15.3 实现三个具体的粒子系统:雪景、
焰火和粒子枪 242
15.3.1 示例:雪景 242
15.3.2 示例:焰火 244
15.3.3 示例:粒子枪 246
15.4 小结 248
第16章 捡取 249
16.1 屏幕到投影窗口的变换 251
16.2 计算Picking射线 252
16.3 变换射线 253
16.4 射线与物体的相交检测 254
16.5 示例:Picking 256
16.6 小结 257


第4部分 Shader和特效

第17章 高级Shader语言的介绍 261
17.1 使用HLSL编写Shader程序 262
17.1.1 全局变量 263
17.1.2 输入输出结构 264
17.1.3 入口点函数 265
17.2 编译一个HLSL Shader程序 266
17.2.1 常量表 266
17.2.2 编译HLSL Shader程序 270
17.3 变量类型 272
17.3.1 标量类型 272
17.3.2 向量类型 272
17.3.3 矩阵类型 273
17.3.4 数组 275
17.3.5 结构 275
17.3.6 typedef关键字 276
17.3.7 变量前缀 276
17.4 关键字、语句和类型转换 277
17.4.1 关键字 277
17.4.2 基本的程序流程 277
17.4.3 类型转换 278
17.5 运算符 279
17.6 用户自定义函数 280
17.7 内建函数 282
17.8 小结 284
第18章 Vertex Shader的介绍 285
18.1 顶点声明(Vertex Declaration) 286
18.1.1 顶点声明的描述 286
18.1.2 创建顶点声明 289
18.1.3 启用一个顶点声明 289
18.2 顶点数据的用途 290
18.3 使用Vertex Shader的步骤 292
18.3.1 编写与编译
Vertex Shader 292
18.3.2 创建Vertex Shader 292
18.3.3 设置Vertex Shader 293
18.3.4 销毁Vertex Shader 293
18.4 示例:散射光 293
18.5 示例:卡通渲染
(Cartoon Rendering) 299
18.5.1 卡通着色
(Cartoon Shading) 300
18.5.2 卡通着色的Vertex Shader
代码 301
18.5.3 勾画出物体的轮廓 303
18.6 小结 308
第19章 Pixel Shader入门 309
19.1 多重纹理概述 309
19.1.1 启用多重纹理 311
19.1.2 多重纹理坐标 312
19.2 Pixel Shader的输入和输出 313
19.3 使用Pixel Shader的步骤 314
19.3.1 编写并编译Pixel Shader
程序 314
19.3.2 创建一个Pixel Shader 314
19.3.3 设置一个Pixel Shader 315
19.3.4 销毁一个Pixel Shader 315
19.4 HLSL取样对象 315
19.5 示例:通过Pixel Shader实现
多重纹理 317
19.6 小结 324
第20章 特效框架
(Effects Framework) 325
20.1 Technique与Pass 326
20.2 更多的HLSL内建对象 327
20.2.1 texture对象 327
20.2.2 取样器(sampler)对象和
取样器状态 328
20.2.3 Vertex Shader对象和
Pixel Shader对象 328
20.2.4 字符串(string) 329
20.2.5 注解(Annotations) 330
20.3 特效文件中的设备状态 330
20.4 创建一个特效 331
20.5 设置常量 333
20.6 使用特效 335
20.6.1 获得特效句柄 335
20.6.2 激活特效 336
20.6.3 启用特效 336
20.6.4 设置当前的渲染Pass 337
20.6.5 关闭特效 337
20.6.6 示例 337
20.7 示例:通过特效文件实现光照效果
和纹理贴图 338
20.8 示例:雾化效果 343
20.9 示例:卡通效果 345
20.10 特效编辑器(EffectEdit) 347
20.11 小结 347
附录A Windows程序设计简介 349
A.1 概述 349
A.1.1 资源 350
A.1.2 事件、消息队列、消息和
消息循环 350
A.1.3 图形用户接口(GUI) 351
A.2 简单的Windows应用程序 352
A.3 一个更好的消息循环 364
A.4 小结 365
参考文献 366

Copyright(C)清华大学出版社有限公司,All Rights Reserved 京ICP备10035462号 联系我们