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 模型輕量化的算法流程

相關文章
相關標籤/搜索