- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[工学]chapt_9_网格及X文件
网格及其X文件格式 绘制复杂物体的过程 怎样将现实中的一个物体,比如,一只花瓶,一个足球,甚至一架大的战斗机,在电脑屏幕上显示呢? 1. 3D建模 先把该物体放在一个虚拟的三维坐标系中,该坐标称为局部坐标系(Local Space), 一般以物体的中心作为坐标原点,采用左手坐标系。然后,对坐标系中的物体进行点采样, 这些采样点按一定顺序连接成为一系列的小平面, 这些小平面称为图元(Primitive), 3D引擎会处理每一个图元,称为一个独立的渲染单位。这样取样后的物体看起来像是由许许多多的三角形,四边形或五边形组成的,就像网一样,我们称为一个网格(Mesh). 这个采样过程又可称为物体的3D建模, 当然现在都有功能非常强大的3D建模工具,例如3D Max。 2. 绘制 我们纪录这些顶点数据和连线情况到一个文件中,3D引擎读取这些数据,依次渲染每一个图元,就能在显示屏幕上再现物体。 在D3D中,纪录这些顶点数据和连线情况的文件称为X文件(X File)。它是以X作为文件名后缀的。 D3D中的网格(Mesh) 网格也是由一系列共面多边形组成,即由一个个的图元组成,所以有的3D图形学书上,也把网格称为图元链表( Primitive List). 一个物体就可以表示成一个多边形的网格。 1. 网格中包含的内容 网格中主要存储的是对物体的点采样信息,所以一般会有物体采样的顶点个数,顶点数据列表;面个数,面的数据列表的信息。然后,为了增加采样物体的真实性,我们还会加入物体的纹理,材质,灯光等信息。 template Mesh {??? 3D82AB44-62DA-11cf-AB39-0020AF71E433 // 给该模块定义的UUID??? DWORD nVertices; // 采样的顶点数??? array Vector vertices[nVertices]; // 顶点数据列表??? DWORD nFaces; // 面个数??? array MeshFace faces[nFaces]; //面的数据列表??? [...] // 一些其他的信息,如:纹理,材质等} 2. D3D中网格的处理 在微软DirectX8.0 中,提供了几个接口来对网格进行处理,其中最常用的接口是ID3DXMesh。我们可以使用该接口来装载网格数据,获得网格的各种信息等。 ID3DXMesh接口的主要功能继承自ID3DXBaseMesh父接口。了解这些是很重要的,其它一些mesh接口如ID3DXPMesh也是继承自ID3DXBaseMesh。 一个mesh由一个或数个子集组成 一个子集(subset)是在mesh中的使用相同属性渲染的一组三角形。这里的属性是指材质,纹理和渲染状态。 一座房子mesh可能被分成的几个子集。 我们通过给每个子集指定一个唯一非负整数来标识子集。这个值可以是存储在一个DWORD中的任意数值。例如,在图10.1中我们用0,1,2和3来标识子集。 在mesh中的每个三角形都与一个属性ID相关联,表示该三角形属于该子集。例如,图10.1中组成地板的三角形具有属性ID0,它表示这些三角形属于子集0。同样,组成墙的三角形具有属性ID1,它表示这些三角形属于子集1。 三角形的属性ID存储在mesh的属性缓存中,它是一个DWORD数组. 3. 绘制 ID3DXMesh接口提供了DrawSubset(DWORD AttribId)方法来绘制AttribId指示的子集中的各个三角形; 要绘制子集0中的所有三角形,我们将这样写: 为了绘制整个mesh,我们必须绘制mesh的所有子集, 且有一个相对应的材质和纹理数组,即子集i与材质和纹理数组的第i项对应: 4. 创建一个Mesh 我们可以使用 D3DXCreateMeshFVF函数来创建一个mesh。 填写上下文数据(需分别向顶点缓存,索引缓存、属性缓存提供顶点、索引、属性数据) NumFaces — mesh将拥有的面数。该值必须大于0。 ?? NumVertices — mesh将拥有的顶点数。该值必须大于0。 ?? Options —用来创建mesh的一个或多个创建标志。要了解所有标志信息请查看sdk文档。现在列出一部分: ?? D3DXMESH_32BIT — mesh使用32位索引。 ?? D3DXMESH_MANAGED — mesh数据将被放在受控的内存中。 ?? D3DXMESH_WRITEONLY — mesh数据只能执行写操作,不能执行读操作。 ?? D3DXMESH_DYNAMIC — mesh缓存将是动态的。 ?? FVF — mesh的顶点格式。 ?? pDevice — 与mesh相关的
文档评论(0)