这里主要通过与gltf1.0标准格式规范进行比对,来分析BIMsurfer技术中的gltf文件(后面用Bgltf简单代指),以及他实现属性信息查看的方法。
-
所有文件
除了一个gltf文件还有三类外部文件,均在gltf中通过URI的方式指引调用。四个glsl文件,一个bin文件,一个xml文件。
Gltf文件:这里的gltf是基于1.0版本规范;
Glsl文件:是简单脚本,应该是用来解析自己在gltf中增加的项目的;
Bin文件:是外部数据文件,标准gltf文件也可以有这类文件,二进制,编辑器无法正常读取;
Xml文件:xml标准化的属性数据,用来存储各个部件的属性信息。
-
Gltf标准格式结构
-
Bgltf的结构
整理过后可以看到Bgltf文件包含accessors、scene、scenes、materials、asset、animations、nodes、bufferViews、skins、buffers、meshs、programs、techniques、shaders项目。下面详细分析每个项目。
-
详细对比
Accessors:访问器,它定义了如何通过提供有关数据类型和布局的信息来解释bufferView
中
的数据;
Scene: 没啥用?
Scenes:场景,是存储在glTF的场景描述的入口点。解析glTF文件时,场景结构从这里开始遍历;
Materials:材质,包含有关对象外观的信息;
Json结构如上图所示,外部标签是其他部分访问这个材质的索引,他会在meshes中被引用。
Asset:说明,版本等信息,在这里获知到这是gltf1.0版本。
Animations:动画,这里是空值。
Nodes:场景图层次结构中的一个节点,可以包含子节点,或mesh、camera实例
skins:蒙皮或者皮肤,这里是空值。
bufferViews:描述了整个原始buffer数据的“块”或“切片”。这里有两个块,都指向同一个原始数据文件,也就是buffers指向的*.bin。两个数据块长度之和等于总数据长度,一个数据块的起始接着另一个数据块的尾部。
buffers:这里指向了外部二进制文件 *.bin。
meshes:表示出现在场景中的几何对象。Indices是索引文件,attributes定义对象的几何数据,顶点位置和顶点法线信息,material是材质,mode模式(这里4表示三角形)。
Techniques:技术描述了用于材料的阴影,就设置参数,没啥可解释的。
Programs:
技术的程序属性创建了一个阴影程序的实例(The program property of a technique creates an instance of a shader program)。Attributes
定义了传递给着色器的顶点属性,fragmentShader和vertexShader引用GLSL的片段和顶点着色器源代码文件,这里重新指向自定义文件。
Shaders:这里存储的着色器源文件。
这里将其中的一个glsl文件示例列出来,可以看出,这个文件就是着色器的参数的设定,与属性值设置没有关系,无关紧要。
-
Xml文件说明
值得一提的是,这里的xml文件也有一定的结构组织性,考虑了冗余数据的一次存储多次使用。如下图所示的一个floor,他在xml中是一个ifcslab的标签对表示的,其属性是内部的IfcPropertySet标签对代表,这些标签对通过id指向xml内部的IfcPropertySet连接,在IfcPropertySet内部用IfcPropertySingleValue标签对存储属性信息。这样,同样的属性信息能被多个对象重复使用。下图的例子中的一个属性组就被两个对象重复使用。
-
结论
bimsurfer并不是在gltf中简单通过指定xml的id来连接三维模型对象和他的属性,这里应该是在bin文件中指定两者的对应关系,但是具体的映射关系需要更深入的研究。