游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3760|回复: 7

ID3DXFileData 和 IDirect3DFileData的区别?

[复制链接]

66

主题

223

帖子

223

积分

中级会员

Rank: 3Rank: 3

积分
223
发表于 2007-7-12 23:25:00 | 显示全部楼层 |阅读模式
通过比对SDK的说明,这两个接口貌似是一样的...
还有,IDirect3DFileData 和 IDirect3DFileObject的区别?
先谢谢各位了...

0

主题

769

帖子

1052

积分

金牌会员

Rank: 6Rank: 6

积分
1052
发表于 2007-7-13 15:22:00 | 显示全部楼层

RE:ID3DXFileData 和 IDirect3DFileData的区别?

从SUMMER2004之后才增加了ID3DXFileData,好像是对原来IDirect3DFileData的升级
具体性能上有什么提高我就不大清楚
但是因为这个改动导致一些函数调用产生了
首先是D3DXLoadSkinMeshFromXof(),D3DXLoadPatchMeshFromXof(),D3DXLoadMeshFromXof()等函数(好像是与X文件相关的函数都有改动)的参数改变了
DX9.0B的版本是IDirect3DFileData的参数现在改成了ID3DXFileData
再者就是以前版本的遍历X文件中的骨骼的函数改变了
原先是通过IDirect3DFileData的是通过IDirectXFileEnumObject::GetNextDataObject()来查看下一个对象
现在是通过ID3DXFileEnumObject::GetChildren(获取总体节点个数)和ID3DXFileEnumObject::GetChild()(与GetNextDataObject()的作用差不多)
之后其他的基本上就差不多是把IDirect3D*****改成ID3DX****,当然还有部分原来的类型被废除了
详见SDK里面的说明吧
本人也仅仅看了一部分而已,如有错误,还望指正

66

主题

223

帖子

223

积分

中级会员

Rank: 3Rank: 3

积分
223
 楼主| 发表于 2007-7-13 20:22:00 | 显示全部楼层

Re:ID3DXFileData 和 IDirect3DFileData的区别?

hoho HRESULT GetChild(          SIZE_T id,
                                 ID3DXFileData **ppObj
                     );
第一个参数是什么意思SDK 里面说
id
[in] Identifier (ID) of the child object to retrieve.

这个ID是指GUID?那反复调用GetChild 是不是和GetNextObject一样会依次获得其子对象?

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
发表于 2007-7-13 23:15:00 | 显示全部楼层

Re:ID3DXFileData 和 IDirect3DFileData的区别?

IDirect3DFileData是dx9b里面的
9c改成了ID3DXFileData
前面那个最好不要再用了
还记得过去搞骨骼蒙皮的时候曾经为这个被折腾过一阵子

0

主题

769

帖子

1052

积分

金牌会员

Rank: 6Rank: 6

积分
1052
发表于 2007-7-14 08:33:00 | 显示全部楼层

Re:ID3DXFileData 和 IDirect3DFileData的区别?

CSDN论坛上转过来的:
1)将.x档用D3DX的各个函数读出,需要读出的有Frame,FrameTransformMatrix,Mesh,AnimationSet,Animation,AnimationKey;
2)转化为自己需要的文件,这里我建立了4个文件,包括.m档(存放mesh),.f档(存放Frame),.a档(存放AnimationSet)和.z档,存放上面3个文件的索引。这4个文件都可以修改部分属性,以达到共享texture、animation等目的。
3)完成读这4个文档的代码,并建立相应的列表、树什么的
4)Render读出的模型

.m档格式如下(最复杂的就是这个档案):
Mesh个数
{//循环,Mesh个数
Name
NumMaterials
  {//循环,NumMaterials个数
      MatD3D
      TextureFilename
  }
FVF
NumFaces
NumVertices
NumBytesPerVertex
true/false //指明是否有SkinInfo
{
   NumBones
     {//NumBones
      BoneName
      NumBoneInfluences
      vertices
      weights
      BoneOffsetMatrix
     }
}
VertexBufferSize
VertexBuffer
IndexBufferSize
IndexBuffer

.f档保存的是二叉树,文件格式不是很好描述,但是将Frame的二叉树结构和TransformationMatrix写入就可以了。

.a档格式如下:
AnimationSet数量
{//循环
  Name
  Length
  Animation数量
  {//循环
     Animation名字
     TranslationKeys  //每一个key都包含时间和转换key
     ScaleKeys
     RotationKeys
     MatrixKeys
  }
}

首先要做的事情就是读.x档,伪代码如下:
D3DXFileCreate
RegisterTemplates( D3DRM_XTEMPLATES, D3DRM_XTEMPLATE_BYTES )//变量在rmxfguid.h中有声明
CreateEnumObject如果使用了UINCODE,第二个参数改成D3DXF_FILELOAD_FROMWFILE
pD3DXEnum->GetChildren( &dwDatas );
for( DWORD dw = 0; dw < dwDatas; dw ++ ) {
   pD3DXEnum->GetChild( dw, &pD3DXData );
   ParseObject( pD3DXData );
}
ParseObject(ID3DXFileData *pDataObj)
{
pDataObj->GetType( &Type );
if( Type == Frame ) {
// do something
}
else if( ... ) { ... }
}
ParseObject中有可能还有LoadMesh,这时候不用CreateTexture,只把Texture的文件名保存就可以了。Load完成之后别忘了将Mesh优化(OptimizeInplace)一下,使用D3DXMESHOPT_ATTRSORT参数。

由于文件的格式已经给出,其它的代码其实就是文件的读写,这里就不罗嗦了。Render部分的代码不怎么复杂,就是DrawIndexedPrimitive函数,这里也不罗嗦了。

PS:楼上的,我现在就是处于被折腾的阶段
[em7] [em7]

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
发表于 2007-7-14 08:52:00 | 显示全部楼层

Re:ID3DXFileData 和 IDirect3DFileData的区别?

http://bbs.gameres.com/showthread.asp?threadid=87707

前几天在这个论坛看到的这篇帖子还可以。对你也许有帮助,
其实x格式蒙皮如果封装好了也就那样了,我快一年都没碰过它了。

将来还准备深入的做一番研究,比如肢体碰撞,柔性皮肤,换装,等等
可能不导出自己的格式还不行,其实也是挺难的。

66

主题

223

帖子

223

积分

中级会员

Rank: 3Rank: 3

积分
223
 楼主| 发表于 2007-7-14 12:11:00 | 显示全部楼层

Re:ID3DXFileData 和 IDirect3DFileData的区别?

多谢各位~

0

主题

769

帖子

1052

积分

金牌会员

Rank: 6Rank: 6

积分
1052
发表于 2007-7-14 23:29:00 | 显示全部楼层

Re: Re:ID3DXFileData 和 IDirect3DFileData的区别?

tonykee: Re:ID3DXFileData 和 IDirect3DFileData的区别?

http://bbs.gameres.com/showthread.asp?threadid=87707

前几天在这个论坛看到的这篇帖子还可以。对你也...

呵呵,这个我看过
X文件的操作我有本书写得挺详细的
可惜就是用的是DX9.0B的库
里面那些对X文件访问的类我得重新写才能够让它在新的SDK下跑起来
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-25 20:49

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表