首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络游戏 >

【Visual C++】游戏开发五十一 浅墨DirectX课程十九 网格模型进阶之路

2013-04-09 
【Visual C++】游戏开发五十一 浅墨DirectX教程十九网格模型进阶之路本系列文章由zhmxy555(毛星云)编写,转载

【Visual C++】游戏开发五十一 浅墨DirectX教程十九 网格模型进阶之路


本系列文章由zhmxy555(毛星云)编写,转载请注明出处。  

文章链接: http://blog.csdn.net/zhmxy555/article/details/8770426

作者:毛星云(浅墨)    邮箱: happylifemxy@163.com  




最近几个星期,不停地收到大家的评论和邮件,大家都说希望浅墨早点讲骨骼动画。本来按浅墨拟定的写作计划是把骨骼动画放到很后面,因为骨骼动画知识需要前面的网格模型知识为基础,知识量本身有些大,很可能要占很多次更新的篇幅。

但是看到大家一致的评论,都说非常期待骨骼动画。那就好吧,我们就来开始慢慢讲。一路披荆斩棘,把网格模型相关知识讲完,然后消灭掉骨骼动画这个看似很难的大块头。

其实骨骼动画学起来并不难,而且掌握了非常好玩。一般的三维游戏中都要用到骨骼动画,没用到骨骼动画的三维游戏基本上都是那种什么小飞机啊,空战之类的小儿科游戏,弱爆了。

骨骼动画的前置知识是网格模型(把“前置”这两个字在word中打出来的时候怎么让我想起了DNF(毒奶粉)里面学技能时的“前置技能”- -)。而网格模型其实是Direct3D中非常重头的一部分内容,但是纵观已经与大家见面的十八篇Direct3D教程以来,只有《 


 




一、网格模型的优化


文章开头就提到过了,我们之前讲过一次网格模型,大家如果不熟练,请移步到《 

网格优化标识

精析

D3DXMESHOPT_COMPACT

从网格中移除没用的顶点和索引项。

D3DXMESHOPT_ATTRSORT

根据属性给三角形排序并调整属性表,这将使DrawSubset方法的绘制执行更有效率。

D3DXMESHOPT_VERTEXCACHE

增加顶点缓存的命中率

D3DXMESHOPT_STRIPREORDER

重组顶点索引,让三角带尽可能的长。

D3DXMESHOPT_IGNOREVERTS

只优化索引信息,忽略掉顶点信息。

另外需要注意的是:D3DXMESHOPT_VERTEXCACHE和D3DXMESHOPT_STRIPREORDER这两者的领域重合了,不能同时使用。

■第二个参数,const DWORD类型的*pAdjacencyIn ,指向优化前的邻接数组的指针,一般我们这样填(DWORD*)pAdjacencyBuffer->GetBufferPointer(),其中的pAdjacencyBuffer我们在D3DXLoadMeshFromX中给它附上了被载入网格的邻接信息,然后GetBufferPointer一下就是指向待优化的邻接数组的指针了。

■第三个参数,DWORD类型的*pAdjacencyOut,指向优化后的邻接数组的指针。如果不需要优化后的邻接信息,设为NULL就好了。

■第四个参数,DWORD类型的*pFaceRemap,用来填充面重影射信息。该数组必须不小于ID3DXMesh::GetNumFaces()。当一个mesh被优化时,由索引缓存定义的面可能被移动;也就是说,在pFaceRemap中的第i项表示第i个原始面被移动后的新索引值。我们一般很少用,取0或者NULL就行了。

■第五个参数,LPD3DXBUFFER类型的*ppVertexRemap,用于保存网格顶点的重映射信息,一般设为0或者NULL就可以了。

讲起来好像每个参数都很复杂,其实用起来蛮简单的,因为不少参数设为0或者NULL就行了,就像这样:

 

   

克隆网格标识

精析

D3DXMESH_32BIT

克隆的网格使用32位索引

D3DXMESH_MANAGED

克隆出的网格的数据的索引缓存用D3DPOOL_MANAGED标识

D3DXMESH_WRITEONLY

克隆出的网格数据只能执行写操作,不能执行读操作

D3DXMESH_DYNAMIC

克隆出的网格缓存为动态的

■第二个参数,DWORD类型的FVF,很好理解,就是为克隆出的新网格指定FVF灵活顶点格式,这就说明了克隆出的新网格是完全可以和原网格有不同的FVF灵活顶点格式的。

■第三个参数,LPDIRECT3DDEVICE9类型的pDevice,老朋友了,我们的金钥匙Direct3D设备指针。

■第四个参数,LPD3DXMESH类型的*ppCloneMesh,指向克隆出的网格模型的指针。我们事先新建一个网格模型指针,然后调用CloneMeshFVF函数的时候填在这里,调用完之后,这个指针就指向新克隆好的网格模型了。

 

如果大家看起来不太懂,没关系,我们来看一个调用实例:

 

我们依旧只贴出核心代码main.cpp,其他的众多文件大家下源代码回去看就好了。


然后三张模型的正面图:

【Visual C++】游戏开发五十一 浅墨DirectX课程十九  网格模型进阶之路

【Visual C++】游戏开发五十一 浅墨DirectX课程十九  网格模型进阶之路

【Visual C++】游戏开发五十一 浅墨DirectX课程十九  网格模型进阶之路

然后三张侧面图:

【Visual C++】游戏开发五十一 浅墨DirectX课程十九  网格模型进阶之路

【Visual C++】游戏开发五十一 浅墨DirectX课程十九  网格模型进阶之路


【Visual C++】游戏开发五十一 浅墨DirectX课程十九  网格模型进阶之路


再来一张纵览:

【Visual C++】游戏开发五十一 浅墨DirectX课程十九  网格模型进阶之路

特写镜头一张:划破天际的锋利刀刃

【Visual C++】游戏开发五十一 浅墨DirectX课程十九  网格模型进阶之路



文章最后,依旧是放出本篇文章配套源代码的下载:


本节笔记配套源代码请点击这里下载:


【浅墨DirectX提高班】配套源代码之十九下载 

 


 

 

以上就是本节笔记的全部内容,更多精彩内容,且听下回分解。

浅墨在这里,希望喜欢游戏开发系列文章的朋友们能留下你们的评论,每次浅墨登陆博客看到大家的留言的时候都会非常开心,感觉自己正在传递一种信仰,一种精神。

 


文章最后,依然是【每文一语】栏目,今天的句子是: 


成功的人都是从逆境中坚持下来的,我们应感谢生命赐予的不幸和挫折,让我们证明我们的坚强和勇敢。


【Visual C++】游戏开发五十一 浅墨DirectX课程十九  网格模型进阶之路

 

下周一,让我们离游戏开发的梦想更近一步。

下周一,游戏开发笔记,我们,不见不散。




16楼weijihai5206小时前
上一期的示例程序还能在我电脑上运行,这次的就运行不了了,报D3D的DLL错误,最新版的DirectX 9.0c runtime具体是怎样的也不清楚,安装了一个dxwebsetup.exe,大小285KB。
Re: zhmxy5554小时前
回复weijihai520nDirectX 9.0c runtime帮你搜了一个,去下载安装就好了http://www.7xiazai.com/soft/html/6.html
15楼Luke_zhuhuanjun6小时前
浅墨,前辈,我来了。每次我都好期待啊,因为我又能学到新的知识了!
Re: zhmxy5556小时前
回复Luke_zhuhuanjunn:)
14楼pinbo2010cp昨天 23:32
浅墨大哥,从你的第一篇教程文章到这,一路走来,真的很感谢你,让我的3d游戏梦更近了一点。对了,我想问一下,教程中的那些模型是从哪里弄来的啊?还有如何提取游戏中的3d模型?继续支持浅墨大哥!!
Re: zhmxy5557小时前
回复pinbo2010cpn国内外的3D模型论坛,比如http://www.cgmodel.cn/
13楼weijihai520昨天 23:11
[quote=weijihai520]上一期的示例程序还能在我电脑上运行,这次的就运行不了了,报D3D的DLL错误,最新版的DirectX...[/quote]n还是不行哦 。
12楼yiyu89昨天 17:57
学习了。浅墨能否推荐点其他的学习资料,龙书过于单薄啊
Re: zhmxy555昨天 18:33
回复yiyu89n哦,差点忘记了,龙书第二版《Introduction to 3D Game Programming with DirectX90c A Shader Approach 》
Re: yiyu89昨天 20:35
回复zhmxy555n感谢浅墨。
Re: zhmxy555昨天 20:36
回复yiyu89n直接看DirectX的SDK文档和Samples吧,市面上所有的教程的第一手知识来源。然后几本书《3D游戏编程大师技巧》、《DirectX游戏开发终极指南》《Real-Time RenderingReal-Time Rendering》等等
11楼L6jun昨天 15:29
终于看见动画的影子了,谢谢大哥,我还想请教,你前面说的“体积绑定”牵涉到哪些方面的知识呢?我先预习下。
Re: zhmxy555昨天 16:53
回复L6junn也就是“外接体”,涉及到D3DXComputeBoundingSphere和D3DXComputeBoundingBox这两个方法。
Re: L6jun昨天 16:57
回复zhmxy555n受教了
10楼m7606861昨天 14:56
嘿嘿,虽然我还没有看到这,先MARK一下,希望浅墨老师把游戏编程精粹发到我邮箱,3768871914@qq.com,谢谢哦
Re: zhmxy555昨天 15:14
回复m7606861n已发送,请查收
Re: m7606861昨天 15:21
回复zhmxy555已接收,谢谢
9楼tmelodykd昨天 14:52
这些天抓紧时间看了下浅墨老师推荐的那本[DIRECTX.9.0.3D游戏开发编程基础],觉得基本上没学到啥东西,就是印象更深刻了,有些东西也更理解了...只是,有木有高级点的书籍呢,求推荐...
Re: zhmxy555昨天 14:53
回复tmelodykdn这可是久负盛名的D3D龙书啊- -n好吧,再推荐几本,《DirectX角色扮演游戏编程》《DirectX高级动画制作》《3D游戏编程大师技巧》《DirectX终极游戏开发指南》,回去看吧
8楼gj542424098昨天 14:50
谢谢 浅墨~
Re: zhmxy555昨天 14:50
回复gj542424098n客气客气~~
7楼zhmxy555昨天 14:49
下载地址已经放出,CSDN资源频道有时候真蛋疼,上传了的资源几个小时都不显示。估计文章的3个踩就是这样来的,看到“资源上传中,稍后放出”字样就怒踩一记,有点厉害啊。。。。。0~7楼稍后回复你们啊,我再睡会儿- -
6楼pirate1986昨天 14:36
请大神也发我一份吧,邮箱pirate1986@126.com
5楼kkbws昨天 14:34
感谢楼主
4楼qq45000昨天 13:08
mark一下表示看完并实践了一下,但感觉优化之后帧率没提上来啊。。。
Re: zhmxy555昨天 13:20
回复qq45000n也许你的模型本来就做过优化了,所以再次优化看不到效果,其实粒子系统才是帧数杀手
Re: qq45000昨天 14:25
回复zhmxy555n那确实,我这显卡跑50000粒子就只有五六帧了。。。
3楼qianlima77昨天 11:14
竟然把我的沙发给抢了,我恨一楼。感谢浅墨的无私奉献,持续强烈关注中。
Re: zhmxy555昨天 12:23
回复qianlima77n:)。一楼早上5点多钟就来了,那时候文章刚发出来不久
2楼u010214000昨天 08:16
好厉害呀~
Re: zhmxy555昨天 09:03
回复u010214000n:)
1楼GRAY_XIAOXIAO昨天 05:28
标记学习中......最近没怎么敲程序 过几天会好好坚持的!
Re: zhmxy555昨天 08:12
回复GRAY_XIAOXIAOn学技术就是要勤动手,加油~

热点排行