详解DX下D游戏编程.doc
《详解DX下D游戏编程.doc》由会员分享,可在线阅读,更多相关《详解DX下D游戏编程.doc(12页珍藏版)》请在咨信网上搜索。
1、个人收集整理 勿做商业用途详解DX9下3D游戏编程2第二章 The Rendering Pipeline(渲染管道)本章的主题就是渲染管道。它是用来创建为3D世界进行几何描述的2D图形并设定一个虚拟摄相机确定这个世界中哪一部分将被透视投影到屏幕上(好难说清呀!还是看图说话吧)。图2。1:左图表示了多个3D世界的物体与一个摄相机的位置及其方向和可视范围,右图则为最终在屏幕上看见的结果。学习目的:1 要搞清楚我们怎样在D3D中表示3D物体2 学习怎样模拟虚拟摄相机3 弄明白渲染管道的工作过程.2.1 Model Representation(模型的显示)一个场景即为多个物体或模型的集合.一个物体可
2、以由三角形网格(triangle mesh)近似的表示,如图2.2所示。由三角形网格建立一个物体,我们称之为建模.也就是说在3D世界中,我们使用无数的小三角形来构造3D实体对象。3D世界中最基本的图元就是三角形,但是D3D也支持点图元和线图元但我们都不常用到。不过在学到第14章的粒子系统的时候,将会用到点图元。此图片被缩小显示,点击查看大图图2.2:三角形形成的地形一个多边形的两边相交的点叫做顶点。为了描述一个三角形,我们通常指定三个点的位置来对应三角形的三个顶点,这样我们就能够很明确的表示出这个三角形了。见图2。3。图2。3:三个顶点定义一个三角形2。1.1 Vertex Formats(顶
3、点格式)我们以前定义的点在数学上来说是正确的,但是当我们在D3D环境中使用它的时候就会觉得很不完善。这是因为D3D中的顶点包含了许多附加的属性,而不再单纯的只有空间位置的信息了.例如:一个顶点可以有颜色和法线向量属性(这两个属性分别在第四章和第五章介绍).D3D让我们可以灵活的构造自己的顶点格式.换句话说,我们可以自己定义顶点的成分。为了创建一个常规的顶点结构,我们首先要创建一个用来使顶点结构,它能存放我们想要存放的数据。例如,下面我们定放了两种顶点数据类型,一种包含了位置和颜色信息,第二种则包含了位置,法线向量,纹理坐标信息(第六章才会学习纹理)。struct ColorVertexfloa
4、t _x, _y, _z; / positionDWORD _color;struct NormalTexVertexfloat _x, _y, _z; / positionfloat _nx, _ny, _nz; / normal vectorfloat _u, _v; / texture coordinates;一旦我们有了完整的顶点格式,我们就要使用灵活顶点格式(FVF)的组合标志来描述它。例如第一个顶点结构,我们要使用如下的顶点格式:#define FVF_COLOR (D3DFVF_XYZ | D3DFVF_DIFFUSE)这表明它包含位置和颜色属性。而第二种结构则要使用:#defi
5、ne FVF_NORMAL_TEX (D3DFVF_XYZ D3DFVF_NORMAL D3DFVF_TEX1)这三个标志分别对应了位置,法线向量,纹理坐标的属性.有一点要谨记,你的标志的顺序必须要和你的顶点结构的顺序一一对应。如果想知道所有的D3DFVF标志,请查阅SDK。2。1。2 Triangles三角形是构建3D物体的基本图形。为了构造物体,我们创建了三角形列(triangle list)来描述物体的形状和轮廓。三角形列包含了我们将要画的每一个三角形的数据信息。例如为了构造一个矩形,我们把它分成两个三角形,如图2。4所示,最后指定每个三角形的顶点。Vertex rect6 = v0,
6、v1, v2, / triangle0v0, v2, v3; / triangle1注意:指定三角形顶点的顺序是很重要的,将会按一定顺序环绕排列,这会在2。3。4节学习相关的内容。此图片被缩小显示,点击查看大图图2.4:两个三角形构成一个矩形2。1.3 Indices3D物体中的三角形经常会有许多共用顶点.如图2。4所表示的矩形.虽然现在仅有两个点被重复使用,但是当要表现一个更精细更复杂的模型的时候,重复的顶点数将会变得很大。例如2.5所示的立方体,仅有八个顶点,但是当用三角形列表示它的时候,所有的点都被重复使用。图2。5:三角形定义的立方体为了解决这个问题,我们引入了索引(indices)的
7、概念。它的工作方式是:我们创建一个顶点列和一个索引列(index list)。顶点列包含所有不重复的顶点,索引列中则用顶点列中定义的值来表示每一个三角形的构造方式.回到那个矩形的示例上来,它的顶点列的构造方式如下:Vertex vertexList4 = v0, v1, v2, v3;索引列则定义顶点列中的顶点是如何构造三角形的:WORD indexList6 = 0, 1, 2, / triangle00, 2, 3; / triangle12.2 The Virtual Camera(虚拟摄相机)摄相机确定3D世界中的哪部分是可见的因而需要将哪部分转换为2D图形。在3D世界中摄相机被放置和
8、定向并且定义其视见体,图2.6展示了摄相机模式的简图。视见体是由可视角度和前裁剪面(Near Plane)与后裁剪面(Far Plane)定义一个平截头体。之所以要选择平截头体构造视见体,是因为我们的显示器都是矩形的。在视见体中不能被看见的物体都会被删除,删除这种数据的过程就叫做“裁剪”。投影窗口(Projection Window)是视见体内的3D几何图形投影生成的用来显示3D图场的2D图像的2D区域。重要的是要知道,我们使用min=(-1,1)和max=(1,1)来定义投影窗口的大小.图2。6:用平截头体定义其视见体为了简化本书接下来的部分绘制,我们使前裁剪面与投影窗口在同一平面上。并且,
9、注意D3D定义投影平面(即投影窗口所在的平面)为Z = 1的平面。2.3 The Rendering Pipeline一旦我们描述几何学上的3D场景和设置了虚拟摄相机,我们要把这个场景转换成2D显示在显示器上。这一系列必须完成的操作就叫做渲染管道,又叫渲染流水线。图2.7展示了一个简化的渲染管道,随后将详细解释图中的每一级.图2.7:一个有删节的渲染管道渲染管道中的许多级都是从一个坐标系到另一个坐标的几何变换.这些变换都使用矩阵变换,D3D为我们进行变换计算并且如果显卡支持硬件变换的话那就更完美了。使用D3D进行矩阵变换,我们唯一要做的事就是提供变换矩阵.然后使用IDirect3DDevice
10、9:SetTranform方法,它输入一个表示变换类型的参数和一个变换矩阵。如图2.7所示,为了进行一个从本地坐标系到世界坐标系的变换,我们可以这样写:DeviceSetTransform(D3DTS_WORLD, &worldMatrix);在下面的小节我们会了解到这个方法的更多细节。2.3。1 Local Space(本地坐标系)本地坐标系又叫做建模空间,这是我们定义物体的三角形列的坐标系。本地坐标系简化了建模的过程。在物体自己的坐标系中建模比在世界坐标系中直接建模更容易.例如,在本地坐标系中建模不像在世界坐标系中要考虑本物体相对于其他物体的位置、大小、方向的关系。图2.7:一个茶壶在本地
11、坐标系中的定义2。3。2 World Space(世界坐标系)一旦我们构造了各种模型,它们都在自己的本地坐标系中,但是我们需要把它们都放到同一个世界坐标系中。物体从本地坐标系到世界坐标系中的换叫做世界变换。世界变换通常是用平移、旋转、缩放操作来设置模型在世界坐标系中的位置、大小、方向.世界变换就是通过各物体在世界坐标系中的位置、大小和方向等相互之间的关系来建立所有物体。图2。9:一些物体在同一世界坐标系中的相互关系世界变换由一个矩阵表示,并且在D3D中调用IDirect3DDevice9::SetTranform方法设置它,记住将转换类型设为D3DTS_WORLD。例如我们要在世界坐标系中放置
12、一个立方体定位在(-3,2,6)和一个球体定位在(5,0,2),我们可以这样写程序:/ Build the cube world matrix that only consists of a translation.D3DXMATRIX cubeWorldMatrix;D3DXMatrixTranslation(&cubeWorldMatrix, -3.0f, 2.0f, 6.0f);/ Build the sphere world matrix that only consists of a translation。D3DXMATRIX sphereWorldMatrix;D3DXMatri
13、xTranslation(&sphereWorldMatrix, 5。0f, 0。0f, -2。0f);/ Set the cubes transformationDeviceSetTransform(D3DTS_WORLD, cubeWorldMatrix);drawCube(); / draw the cube/ Now since the sphere uses a different world transformation, we/ must change the world transformation to the spheres。 If we/ dont change this
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 详解 DX 游戏 编程
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【a199****6536】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【a199****6536】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。