【转】D3DXLoadSkinMeshFromXof函数及.x在不同dx版本中

来源:互联网 发布:福昕pdf阅读器for mac 编辑:程序博客网 时间:2024/05/17 02:48
原文:http://zengwu3915.blog.163.com/blog/static/2783489720097414132811/
在看到《DirectX 角色扮演游戏编程》这书第二章中的.x程序,运行光盘上的代码出错
error C2664: 'D3DXLoadSkinMeshFromXof' : cannot convert parameter 1 from 'IDirectXFileData *' to 'LPD3DXFILEDATA'
后来才发现,这书上的代码都是DirectX9b版本的,而我用的是DirectX9c,因为9c是9b的升级版,不想用回9b了,于是想在9c中解决这个问题。
从DirectX SUMMER2004(dx9c)之后才增加了ID3DXFileData,网上都说它是原来IDirect3DFileData的升级,具体性能上有什么提高我也是不清楚,但是因为这个改动导致一些函数调用产生了挺郁闷的错误,首先是我现在遇到的这个D3DXLoadSkinMeshFromXof()函数了,还有一些与.x有关的一些函数也出现了问题,像D3DXLoadPatchMeshFromXof(),D3DXLoadMeshFromXof()等函数的参数改变了DX9.0B的版本是IDirect3DFileData的参数现在改成了ID3DXFileData。再者就是以前版本的遍历.X文件中的骨骼的函数改变了原先是通过IDirect3DFileData的是通过IDirectXFileEnumObject::GetNextDataObject()来查看下一个对象,现在是通过ID3DXFileEnumObject::GetChildren(获取总体节点个数)和ID3DXFileEnumObject::GetChild()(与GetNextDataObject()的作用差不多,但由以前的一个变成了二个函数,参数也不对了)之后其他的基本上就差不多是把IDirectX*****改成ID3DX****,当然还有部分原来的类型被废除了。
再说下遍历.X文件中的骨骼的函数吧,以《DirectX 角色扮演游戏编程》这书第二章中的.x程序为例
在9b版本中(部分代码)

IDirectXFile *pDXFile = NULL;
  IDirectXFileEnumObject *pDXEnum = NULL;
  IDirectXFileData *pDXData = NULL;
  sFrame *Frame;
… …
// Allocate a frame that becomes root

  Frame = new sFrame();

  // Loop through all objects looking for the frames and meshes

 while(SUCCEEDED(pDXEnum->GetNextDataObject(&pDXData))) {
    ParseXFileData(pDXData, Frame);
    ReleaseCOM(pDXData);
}


到9c版本中则改成(以下为本人在网上收信集资料,自己改的,并不是最好的,但能正常编释运行)

ID3DXFile *pDXFile = NULL;
    ID3DXFileEnumObject *pDXEnum = NULL;
    ID3DXFileData *pDXData = NULL;
sFrame *Frame;
… …

// allocate a Frame that becomes root

Frame = new sFrame();
// Loop through all objects looking for the frames and meshes

SIZE_T num_child;

// retrieve the number of children in this file data object

pDXEnum->GetChildren(&num_child);

// loop through all objects looking for the frames and meshes

for(SIZE_T i = 0; i < num_child; i++)
{
    // retrieves a child object in this file data object

    if(FAILED(pDXEnum->GetChild(i, &pDXData)))
        return NULL;
    // parse pDXFile data

    ParseXFileData(pDXData, Frame);
ReleaseCOM(pDXData)
}


都不知道微软玩什么,看上去只有更复杂,本人还不是很明白升级后有什么优点。
经过在网上乱逛,本人也只是大致了解这个的一些基本用法,致于性能上的区别还是不懂。先学会用,以后时间长了,用多了,慢慢的就会了解一些的。下面附上《DirectX 角色扮演游戏编程》这书第二章中的.x程序书中的dx9b版及本人修改的dx9c版本,希望对遇到同样问题的朋友有帮助,本代码仅供参考,有错误还请指出…
<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
阅读(961) | 评论(0) | 转发(0) |
0

上一篇:【转】D3DXMatrixPerspectiveFovLH参数fovy

下一篇:JNI的类路径问题

相关热门文章
  • saltstack批量部署并配置nginx...
  • 开源负载均衡LVS随机自启动异...
  • nginx default跳转
  • jsp嵌套
  • 音视频聊天开发: 9 声音 建议...
  • test123
  • 编写安全代码——小心有符号数...
  • 使用openssl api进行加密解密...
  • 一段自己打印自己的c程序...
  • sql relay的c++接口
  • linux dhcp peizhi roc
  • 关于Unix文件的软链接
  • 求教这个命令什么意思,我是新...
  • sed -e "/grep/d" 是什么意思...
  • 谁能够帮我解决LINUX 2.6 10...
给主人留下些什么吧!~~
评论热议
0 0
原创粉丝点击