当前位置:首页 » 服务器技术
开发技术指南» 文章正文
    引言: 11. Mesh Part Two
 

 

 ·在directx9.0中使用mesh(1)    »显示摘要«
    摘要:10. mesh part one 本文译自《introduction to 3d game programming with directx 9.0》第十章“mesh part one”,敬请斧正。 在d3dx中,有很多函数都使用了id3dxmesh接口,如d3dxcreate*之类。id3dxmesh接口的主要功能继承自id3dxbasemesh父类接口,还有其他的mesh接口也是从id3dxbasemesh接口继承的......
 ·asp.net 中使用 客户端脚本    »显示摘要«
    摘要: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类型),一定要把......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE