引言: 11. Mesh Part Two
摘要:10. mesh part one
本文译自《introduction to 3d game programming with directx 9.0》第十章“mesh part one”,敬请斧正。
在d3dx中,有很多函数都使用了id3dxmesh接口,如d3dxcreate*之类。id3dxmesh接口的主要功能继承自id3dxbasemesh父类接口,还有其他的mesh接口也是从id3dxbasemesh接口继承的......
摘要:working with client-side script
http://msdn.microsoft.com/asp.net/using/building/web/default.aspx?pull=/library/en-us/dnaspp/html/clientsidescript.asp
......
在DirectX9.0中使用Mesh(2)11. mesh part two
【相关文章:
调用DLL文件中的FORM 】
本文译自«introduction to 3d game programming with directx 9.0»第十一章“mesh part two”,敬请斧正。 【扩展阅读:
钩子(HOOK)机制的使用 】
l 学习加载.x文件 【扩展信息:
调用DLL文件中的FORM 】
本章介绍d3dx库提供的与mesh有关的接口、结构、函数。通过本章的学习,将能够加载复杂的3d模型,能够控制mesh对象的精细程度。本章要达到的目标:
l 理解使用渐进mesh(progressive mesh)的好处与学习如何使用渐进mesh接口id3dxpmesh。将原文中的progressive mesh翻译为渐进网格,不知是否恰当
l 学习边界范围(bounding volume),以及如何使用d3dx函数创建边界范围
11.1. 关于id3dxbuffer
这个接口贯穿整个d3dx库,需要对该接口有大体上的认识。id3dxbuffer是d3dx用来管理连续内存块的结构,他只有两个方法:
l lpvoid getbufferpointer(); --返回数据块的首地址
l dword getbuffersize(); --返回缓冲区的大小,以字节为单位
例如,d3dxloadmeshfromx函数就使用id3dxbuffer返回mesh对象的邻接信息。因邻接信息是dword数组,所以需要进行类型转换。如:
dword* info =(dword*)adjacencyinfo->getbufferpointer();
d3dxmaterial* mtrls = (d3dxmaterial*)mtrlbuffer->getbufferpointer();
又因为id3dxbuffer是一个com对象,所以,用完后,需要进行释放。
adjacencyinfo->release();
mtrlbuffer->release();
也可以使用如下函数创建一个空的id3dxbuffer对象:
hresult winapi d3dxcreatebuffer(
dword numbytes,
lpd3dxbuffer *ppbuffer
);
其中参数的含义显而易见。例如,创建一个包含四个整型数的缓冲区:
id3dxbuffer* buffer = 0;
d3dxcreatebuffer( 4 * sizeof(int), &buffer );
11.2. x文件
使用d3dxcreate*函数,可以创建一些简单的几何体,如球、圆柱、立方体等。如果想通过手动设定顶点的方式创建较复杂的3d对象,你会发现这太麻烦了,简直无法做到!现在,可以使用很多种3d建模工具软件来完成这项枯燥工作,如3ds max,lightwave 3d,maya等。使用这样的建模工具,可以在可视化的、交互的环境中设计复杂、逼真的模型,而且还有丰富的工具可用,使整个建模过程相当简单。这里的简单是相对于在“程序中手动设定顶点的方式建模”,实际上,这些建模工具还是相当复杂的,想得心应手的使用,可不是一朝一夕之功。
这些建模工具可以将所建立的模型的数据(几何信息,材质,动画等)保存到文件。我们需要从文件中分析提取需要的数据,然后应用到自己的3d程序中。有一种常用的文件格式,xfile,其扩展名为.x,较为简单,是direct3d定义的文件格式,d3dx库提供了完整的支持,可满足一般的需要。
11.2.1. 加载一个.x文件
使用下面的函数加载存储在.x文件中的mesh数据。它创建一个id3dxmesh对象,然后从.x文件中读取mesh的几何信息。
hresult winapi d3dxloadmeshfromx(
lpctstr pfilename,
dword options,
lpdirect3ddevice9 pd3ddevice,
lpd3dxbuffer *ppadjacency,
lpd3dxbuffer *ppmaterials,
lpd3dxbuffer *ppeffectinstances,
dword *pnummaterials,
lpd3dxmesh *ppmesh
);
l pfilename –.x文件的文件名
l options –创建mesh的标志。详情可参考sdk文档中的d3dxmesh枚举类型。常用的几个标志如下:
n d3dxmesh_32bit –使用32位的顶点索引,默认为16位
n d3dxmesh_managed –使用受控的内存缓冲池
n d3dxmesh_writeonly –缓冲区只可执行写操作
n d3dxmesh_dynamic –使用动态内存缓冲池...
下一页 摘要:昨天和猪讨论了一下关于bs构架的系统应该注意那些问题,自己想了想,整理了一下,hoho,都是一些拙见,希望大家来给些我没有提到的东西。 既然是b/s机构的,那先从b开始说吧:) b == browser (浏览器、拼错了别骂我。)一般就是指客户端,一般就是客户端提出请求,然后服务器端响应请求,其中还设计到检索、更新数据库。在客户端应该注意的问题,我归纳了下面几点: 1,关于控件的设置 这里要说的就是:对于需要用户填写的表但项目(string类型),一定要把......