.x文件结构分析

本文详细分析了.x文件的结构,包括Header、Frame、Mesh等关键元素。.x文件常用于3D模型数据存储,特别是对于物理模拟如PhysX、Bullet的碰撞检测有帮助。Mesh模板包含多种信息,如顶点、面、纹理坐标、法向量等。动画相关数据如AnimationSet、AnimationKey也进行了说明,这些数据用于定义3D对象的动作和变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        之前在玩directx编程的时候,对于组织3D网格模型数据的文件,我用过几种格式,分别是.x,.obj,.sdkmesh等等,.x文件用得比较多,.obj文件比较简单,.sdkmesh是要用directx SDK里面的工具转化而成的,看SDK文档说推荐用它,因为会比较高效(好久以前看的了,好像是这样)。在这里对.x文件进行分析一下,对于以后使用physX,bullet等做物理模拟碰、撞检测等会有帮助,因为之前看physX SDK里面的sample是对.obj的文件进行解析然后才cook成可以用于检测碰撞的模型的。

1、每个.x文件都是以一个header开头,如下所示。xof代表这是一个.x文件,0302代表.x文件是使用3.2版本的模板,txt代表接下来的.x文件是用text格式存储的,而不是二进制。最后的0032是浮点数的位数是32位。

xof 0302txt 0032

2、在.x文件中,你可以看到很多templates,template定义了如何存储一个数据对象,用户可以自己定义具体的格式,可以把它想象成c++里面的类,template的实例为数据对象。每个template有一个GUID,DirectX用这个大数来识别template。Directx3D中预定义好的template在rmxftmpl.h中,GUID在rmxfguid.h中。模板所允许的数据类型成为可选成员,这些可选成员作为数据对象的子对象来保存,子对象可以是另一种数据类型的引用。每个模板都可以容纳任何类型的数据,任何数据类型的组合都可以在一个模板里面使用。

        下面是一个模板。模板的名字是Header,可以由数字、字符、下划线组成,但是不能用数字开头。第二行是GUID,第三四五行是数据成员

template Header {
 <3D82AB43-62DA-11cf-AB39-0020AF71E433>
 WORD major;
 WORD minor;
 DWORD flags;
}

模板中有一个部分是用户控制模板的限制程度,一个模板可以是开放的、闭合的或者是受限

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值