Xbim.GLTF源碼解析(四):輕量化處理


 原創作者:flowell,轉載請標明出處:https://www.cnblogs.com/flowell/p/10839433.html


 

在IFC標准中,由IfcRepresentationMap支持圖元的復用。IfcRepresentationMap包含一個或多個IfcMappedItem,IfcShapeRepresentation可以應用笛卡爾變換算子將自身(ShapeRepresentation)變換到另一個本地坐標系,這個變換算子包含在IfcMappedItem中。IfcMappedItem的坐標笛卡爾變換被限制為平移,旋轉,鏡像和縮放,對應的矩陣必須是TRS矩陣。因此,通過包含IfcRepresentationMap屬性便可以達到將同樣的ShapeRepresentation應用在不同的IfcProduct中。

圖1 通過IfcRepresentationMap復用ShapeRepresentation

如下圖,在同一個模型中的高亮的兩把椅子。兩把椅子的外形一致,材質紋理和大小在視覺上都是一致的,它們位於坐標系中不同的坐標。根據這個Representation實例的EntityLabel推斷,這兩把椅子分別屬於不同的ShapeRepresentation。

 

圖2 IFC模型中的一把椅子

 

圖3 IFC模型中的另一把椅子

追蹤兩把椅子的ShapeRepresentation,可以發現最終抵達了同一個元素。這個元素的Type是IfcShapeRepresentation,說明這也是一個ShapeRepresentation,但是在圖中並沒有顯示出來。該ShapeRepresentation擁有的是真實的圖形數據,可以看到列表中包含了8個圖元信息,這些信息真是地構成了一張完整的椅子。而這個ShapeRepresentation擁有PresentationMap屬性,該屬性擁有多個IfcMappedItem,這些IfcMappedItem又正好對應着上圖椅子里的IfcShapeRepresentation所引用的IfcMappedItem。總而言之,一個IfcMappedItem便對應着一個坐標變換,通過坐標變換從而使得同樣的椅子出現在空間中的不同坐標中。

 

圖4 構件共用的IfcShapeRepresentation

因為坐標轉換已經包含在IFC文件中了,對於構件而言,其本地坐標系到世界坐系的轉換坐標已經包含在構件本身的屬性里,所以本章的工作無需再次計算變換的矩陣,只要讀取構件的變換矩陣並保存即可。

基於以上理論依據,本文提出以下輕量化算法:

算法流程:

 

圖5 模型輕量化的算法流程


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM