FME支持.x文件格式

原文发布时间:2014/12/5  10:06:43

作者:小C

众所周知,FME具有强大的格式转换功能,无论是二维的,还是三维的数据格式。现在我们来看看,FME支持的.x这种三维文件格式,FME读模块和写模块都支持这种格式。

.X文件格式是DirectX(Direct eXtension)的一种文件格式。DirectX是由微软公司创建的多媒体编程接口,由C++编程语言实现,遵循COM。以X为文件扩展名的文件是微软定义的文件格式,用来存放3D模型.X文件有文本和二进制两种存储形式。.X文件内部结构如下:Frame定义框架容器,用来装Mesh对象。可以包含多个Mesh对象,也可以包含子框架。

下面是用FME生成的一个.X文件,我们先用FME Data Inspector打开该文件:

  

上图显示了该三维模型的几何对象图形要素以及属性信息,下面我们来进一步观察其几何对象特性信息。该模型是由3D IFMEMesh几何对象组成的,节点池由8个节点组成,8个节点法向:

  

12个mesh部分组成,每个部分的前面外观用颜色显示,其值如下:

 

  

现在我们用文本的方式打开该文件格式:

xof 0303txt 0032    

template Vector {                                    

<3d82ab5e-62da-11cf-ab39-0020af71e433>

 FLOAT x;

 FLOAT y;

 FLOAT z;

}

 

 

template MeshFace {

<3d82ab5f-62da-11cf-ab39-0020af71e433>

 DWORD nFaceVertexIndices;

 array DWORD faceVertexIndices[nFaceVertexIndices];

}

 

 

template Mesh{ 

 <3d82ab44-62da-11cf-ab39-0020af71e433>

 DWORD nVertices;

 array Vector vertices[nVertices];

 DWORD nFaces;

  array MeshFace faces[nFaces];

 [...]

}

 
 

 

template MeshNormals {

 <f6f23f43-7686-11cf-8f52-0040333594a3>

 DWORD nNormals;

 

  array Vector normals[nNormals];

 DWORD nFaceNormals;

 array MeshFace faceNormals[nFaceNormals];

}

 

 

template ColorRGBA { 

<35ff44e0-6c7c-11cf-8f52-0040333594a3>

 FLOAT red;

 FLOAT green;

 FLOAT blue;

 FLOAT alpha;

}

 

 

template ColorRGB{ 

<d3e16e81-7835-11cf-8f52-0040333594a3>

 FLOAT red;

 FLOAT green;

 FLOAT blue;

}

 
 

 

template Material {

 <3d82ab4d-62da-11cf-ab39-0020af71e433>

 ColorRGBA faceColor;

 FLOAT power;

 ColorRGB specularColor;

 ColorRGB emissiveColor;

 [...]

}

 

 

template MeshMaterialList {

 

 

 <f6f23f42-7686-11cf-8f52-0040333594a3>

 DWORD nMaterials;

 DWORD nFaceIndexes;

 array DWORD faceIndexes[nFaceIndexes];

 [Material <3d82ab4d-62da-11cf-ab39-0020af71e433>]

}

 

 

Mesh {

 8;

 36621192.000000;424.299988;3117173.75;,

 36621516.000000;424.299988;3116752.00;,

 36621812.000000;469.33627;3117001.00;,

 36620888.000000;424.299988;3116935.25;,

 36621192.000000;427.299988;3117173.75;,

 36621812.000000;472.33627;3117001.00;,

 36621516.000000;427.299988;3116752.00;,

 36620888.000000;427.299988;3116935.25;;

 12;

 3;0,1,2;,

 3;0,3,1;,

 3;2,4,0;,

 3;2,5,4;,

 3;1,6,2;,

 3;2,6,5;,

 3;3,7,1;,

 3;1,7,6;,

 3;0,7,3;,

 3;0,4,7;,

 3;4,6,7;,

 3;4,5,6;;

 

 MeshNormals {

  8;

  -0.143195;-0.621969;0.769838;,

  0.189088;-0.637996;-0.746463;,

  0.844171;-0.502361;0.187105;,

  -0.819048;-0.551516;-0.158082;,

  -0.164025;0.614018;0.772061;,

  0.782009;0.600960;0.165255;,

  0.138553;0.588690;-0.796396;,

  -0.819051;0.551515;-0.158071;;

  12;

  3;0,1,2;,

  3;0,3,1;,

  3;2,4,0;,

  3;2,5,4;,

  3;1,6,2;,

  3;2,6,5;,

  3;3,7,1;,

  3;1,7,6;,

  3;0,7,3;,

  3;0,4,7;,

  3;4,6,7;,

  3;4,5,6;;

 }

 

 MeshMaterialList {

  1;

  12;

  0,

  0,

  0,

  0,

  0,

  0,

  0,

  0,

  0,

  0,

  0,

  0;

 

  Material {

   0.333333;1.000000;1.000000;1.000000;;

   1.000000;

   1.000000;1.000000;1.000000;;

   0.000000;0.000000;0.000000;;

  }

 }

}

 

从上面这个数据我们就可以更清楚的认识到.x这种格式的内部结构:

Mesh 对象

定义一个Mesh对象。 

共有9个部分组成: 

1、包含的顶点数;

2、顶点列表,一个顶点包含三个浮点值;

3、面数 ;

4、面的顶点索引列表,每个面包含三个顶点;

5、MeshFaceWraps结构,暂时无用 ;

6、MeshTextureCoords纹理坐标,可选 ;

7、MeshNormals法向,可选;

8、MeshVertexColors顶点颜色,默认为白色;

9、MeshMaterialList材质,不提供的话默认为白色 。

 

 

若对文章有疑问,可发送邮件至[email protected]提问或讨论。

猜你喜欢

转载自blog.csdn.net/fmechina/article/details/81166336
今日推荐