交互媒体设计(拓展) 交互媒体设计(拓展) 12_1Mesh网格(二).pptVIP

交互媒体设计(拓展) 交互媒体设计(拓展) 12_1Mesh网格(二).ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Part Ⅲ Direct3D的应用 三 Mesh Ⅱ 这节课继续学习D3DX库所提供的与mesh相关的接口、数据结构和函数 主要目标 1. ID3DXBuffer接口的相关内容 2. 把X文件里的数据加载到ID3DXMesh对象中 3. 了解渐进式网格,使用渐进式网格接口ID3DXPMesh 4. 学习包围体相关的知识 ID3DXBuffer接口的相关内容 ID3DXBuffer接口是一个通用的数据缓冲 D3DX用它来保存一块连续内存区域中的数据 可用于保存mesh的信息 创建ID3DXBuffer接口的对象 HRESULT??D3DXCreateBuffer ( ????DWORD?NumBytes, // 缓冲区大小 ????LPD3DXBUFFER?*ppBuffer // 返回指针 ); 创建一个空缓冲区 代码片断 下面的例子创建一个可以保存4个整型数的缓冲区: ID3DXBuffer* buffer = 0; D3DXCreateBuffer( 4 * sizeof(int), buffer ); 接口的方法 typedef void* LPVOID LPVOID GetBufferPointer() 返回数据区首位置的指针 DWORD GetBufferSize() 返回数据区的大小 DWORD* info = (DWORD*)adjacencyInfo-GetBufferPointer(); D3DXMATERIAL* mtrls = (D3DXMATERIAL*)mtrlBuffer-GetBufferPointer(); 注意: 因为返回的指针类型是void,所以要转型 注意: ID3DXBuffer是一个COM对象,所以用完之后也要Release ID3DXBuffer::Release(); .x文件 X文件是一种模型文件,是DirectX自带的模型格式 D3DX对它提供了支持,包括读取及保存.x文件等操作 许多建模软件都可以把模型导出为.x文件 常用的建模软件: 3DS MAX MAYA 微软提供了从这些软件中导出.x文件的插件 在DirectX官方网站上可以下载extra开发包 读取.x文件 HRESULT?WINAPI?D3DXLoadMeshFromX ( ???LPCTSTR?pFilename, ???DWORD?Options, ???LPDIRECT3DDEVICE9?pDevice, ???LPD3DXBUFFER?*ppAdjacency, ???LPD3DXBUFFER?*ppMaterials, ←←←←←↑ ???LPD3DXBUFFER?*ppEffectInstances, ↑ ???DWORD?*pNumMaterials, → → → → → →↑ ???LPD3DXMESH?*ppMesh ); D3DMATERIAL9 不同于 D3DXMATERIAL 专用于x文件中的材质信息 X文件中的材质 typedef struct D3DXMATERIAL? { D3DMATERIAL9?MatD3D; LPSTR?pTextureFilename; } D3DXMATERIAL 注意: 材质数组中的元素不仅仅包括物体的材质 每个元素对应着mesh中的每个subset 代码片断 for( int i = 0; i Mtrls.size(); i++ ) { Device-SetMaterial( Mtrls[i] ); Device-SetTexture(0, Textures[i]); Mesh-DrawSubset(i); } 利用一个循环渲染mesh 生成顶点法线 X文件中不一定保存着顶点法线 要在渲染模型时使用光照,模型上的顶点必须有顶点法线数据 如果没有,我们自己添加 HRESULT??D3DXComputeNormals ( ???LPD3DXBASEMESH?pMesh, ???const DWORD?*pAdjacency ); 可以为NULL 代码片断 if ( !(pMesh-GetFVF() D3DFVF_NORMAL) ) { ID3DXMesh* pTempMesh = 0; pMesh-CloneMeshFVF( D3DXMESH_MANAGED, pMesh-GetFVF() | D3DFVF_NORMAL, Device, pTempMesh ); D3DXComputeNormals( pT

您可能关注的文档

文档评论(0)

WanDocx + 关注
实名认证
文档贡献者

大部分文档都有全套资料,如需打包优惠下载,请留言联系。 所有资料均来源于互联网公开下载资源,如有侵权,请联系管理员及时删除。

1亿VIP精品文档

相关文档