- 1、本文档共12页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
详解DX下D游戏编程
详解DX9下3D游戏编程2
第二章 The Rendering Pipeline(渲染管道)本章的主题就是渲染管道。它是用来创建为3D世界进行几何描述的2D图形并设定一个虚拟摄相机确定这个世界中哪一部分将被透视投影到屏幕上(好难说清呀!还是看图说话吧)。图2.1:左图表示了多个3D世界的物体与一个摄相机的位置及其方向和可视范围,右图则为最终在屏幕上看见的结果。学习目的:1. 要搞清楚我们怎样在D3D中表示3D物体2. 学习怎样模拟虚拟摄相机3. 弄明白渲染管道的工作过程.2.1 Model Representation(模型的显示)一个场景即为多个物体或模型的集合。一个物体可以由三角形网格(triangle mesh)近似的表示,如图2.2所示。由三角形网格建立一个物体,我们称之为建模。也就是说在3D世界中,我们使用无数的小三角形来构造3D实体对象。3D世界中最基本的图元就是三角形,但是D3D也支持点图元和线图元但我们都不常用到。不过在学到第14章的粒子系统的时候,将会用到点图元。此图片被缩小显示,点击查看大图图2.2:三角形形成的地形一个多边形的两边相交的点叫做顶点。为了描述一个三角形,我们通常指定三个点的位置来对应三角形的三个顶点,这样我们就能够很明确的表示出这个三角形了。见图2.3。图2.3:三个顶点定义一个三角形2.1.1 Vertex Formats(顶点格式)我们以前定义的点在数学上来说是正确的,但是当我们在D3D环境中使用它的时候就会觉得很不完善。这是因为D3D中的顶点包含了许多附加的属性,而不再单纯的只有空间位置的信息了。例如:一个顶点可以有颜色和法线向量属性(这两个属性分别在第四章和第五章介绍)。D3D让我们可以灵活的构造自己的顶点格式。换句话说,我们可以自己定义顶点的成分。为了创建一个常规的顶点结构,我们首先要创建一个用来使顶点结构,它能存放我们想要存放的数据。例如,下面我们定放了两种顶点数据类型,一种包含了位置和颜色信息,第二种则包含了位置,法线向量,纹理坐标信息(第六章才会学习纹理)。struct ColorVertex{float _x, _y, _z; // positionDWORD _color;};struct NormalTexVertex{float _x, _y, _z; // positionfloat _nx, _ny, _nz; // normal vectorfloat _u, _v; // texture coordinates};一旦我们有了完整的顶点格式,我们就要使用灵活顶点格式(FVF)的组合标志来描述它。例如第一个顶点结构,我们要使用如下的顶点格式:#define FVF_COLOR (D3DFVF_XYZ | D3DFVF_DIFFUSE)这表明它包含位置和颜色属性。而第二种结构则要使用:#define FVF_NORMAL_TEX (D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_TEX1)这三个标志分别对应了位置,法线向量,纹理坐标的属性。有一点要谨记,你的标志的顺序必须要和你的顶点结构的顺序一一对应。如果想知道所有的D3DFVF标志,请查阅SDK。2.1.2 Triangles三角形是构建3D物体的基本图形。为了构造物体,我们创建了三角形列(triangle list)来描述物体的形状和轮廓。三角形列包含了我们将要画的每一个三角形的数据信息。例如为了构造一个矩形,我们把它分成两个三角形,如图2.4所示,最后指定每个三角形的顶点。Vertex rect[6] = {v0, v1, v2, // triangle0v0, v2, v3}; // triangle1注意:指定三角形顶点的顺序是很重要的,将会按一定顺序环绕排列,这会在2.3.4节学习相关的内容。此图片被缩小显示,点击查看大图图2.4:两个三角形构成一个矩形2.1.3 Indices3D物体中的三角形经常会有许多共用顶点。如图2.4所表示的矩形。虽然现在仅有两个点被重复使用,但是当要表现一个更精细更复杂的模型的时候,重复的顶点数将会变得很大。例如2.5所示的立方体,仅有八个顶点,但是当用三角形列表示它的时候,所有的点都被重复使用。图2.5:三角形定义的立方体为了解决这个问题,我们引入了索引(indices)的概念。它的工作方式是:我们创建一个顶点列和一个索引列(index list)。顶点列包含所有不重复的顶点,索引列中则用顶点列中定义的值来表示每一个三角形的构造方式。回到那个矩形的示例上来,它的顶点列的构造方式如下:Vertex vertexLi
文档评论(0)