Xbim.GLTF源码解析(四):轻量化处理

 原创做者:flowell,转载请标明出处:http://www.javashuo.com/article/p-hounzliq-r.htmlhtml


 

在IFC标准中,由IfcRepresentationMap支持图元的复用。IfcRepresentationMap包含一个或多个IfcMappedItem,IfcShapeRepresentation能够应用笛卡尔变换算子将自身(ShapeRepresentation)变换到另外一个本地坐标系,这个变换算子包含在IfcMappedItem中。IfcMappedItem的坐标笛卡尔变换被限制为平移,旋转,镜像和缩放,对应的矩阵必须是TRS矩阵。所以,经过包含IfcRepresentationMap属性即可以达到将一样的ShapeRepresentation应用在不一样的IfcProduct中。算法

图1 经过IfcRepresentationMap复用ShapeRepresentationapp

以下图,在同一个模型中的高亮的两把椅子。两把椅子的外形一致,材质纹理和大小在视觉上都是一致的,它们位于坐标系中不一样的坐标。根据这个Representation实例的EntityLabel推断,这两把椅子分别属于不一样的ShapeRepresentation。3d

 

图2 IFC模型中的一把椅子htm

 

图3 IFC模型中的另外一把椅子blog

追踪两把椅子的ShapeRepresentation,能够发现最终抵达了同一个元素。这个元素的Type是IfcShapeRepresentation,说明这也是一个ShapeRepresentation,可是在图中并无显示出来。该ShapeRepresentation拥有的是真实的图形数据,能够看到列表中包含了8个图元信息,这些信息真是地构成了一张完整的椅子。而这个ShapeRepresentation拥有PresentationMap属性,该属性拥有多个IfcMappedItem,这些IfcMappedItem又正好对应着上图椅子里的IfcShapeRepresentation所引用的IfcMappedItem。总而言之,一个IfcMappedItem便对应着一个坐标变换,经过坐标变换从而使得一样的椅子出如今空间中的不一样坐标中。get

 

图4 构件共用的IfcShapeRepresentationit

由于坐标转换已经包含在IFC文件中了,对于构件而言,其本地坐标系到世界坐系的转换坐标已经包含在构件自己的属性里,因此本章的工做无需再次计算变换的矩阵,只要读取构件的变换矩阵并保存便可。io

基于以上理论依据,本文提出如下轻量化算法:引用

算法流程:

 

图5 模型轻量化的算法流程

相关文章
相关标签/搜索