//作者:迷途的小书童
//微信公众号:g0415shenweri
Bim模型Hlod设计文档

Bim模型的渲染我们采用Hlod的解决方案来解决大规模的模型渲染的问题。
我们参考cesiumgs的3dtiles的设计格式进行设计。
3dtile格式
我们采用json的形式来组织Hlod数据
看下面示例:
json格式一:
{ "asset": { "version": "1.0", "tilesetVertion": "saffaasd" }, "properties": { "Height": { "minimum": 1, "maximum": 241.6 } }, "geometricError": 494.815, "root": { "boundingVolume": { "box": [ -1766., 1557., 55.25, 3513., 0, 0, 0, 4087., 0, 0, 0, 88.78 ] }, "geometricError": 268.053, "refine": "ADD", "content": { "uri": "0/0/0.b3dm", "boundingVolume": { "box": [ -1766., 1557., 55.25, 3513., 0, 0, 0, 4087., 0, 0, 0, 88.78 ] } }, "children": [ { "boundingVolume": { "box": [ -2557., 1372., 40.24, 77.75, 0, 0, 0, 77.25, 0, 0, 0, 49.08 ] }, "content": { "uri": "Tile_+000_+031/Tile_+000_+031.json" }, "geometricError": 119.1 }, { "boundingVolume": { "box": [ -2560., 1522., 41.87, 77.25, 0, 0, 0, 77., 0, 0, 0, 33.1 ] }, "geometricError": 114.4, "content": { "uri": "Tile_+000_+032/Tile_+000_+032.json" }, } ] } }
asset:必填字段,json的开头,version和tilesetVersion 表示格式的版本。
properties:选填字段,用来表示bim模型的最大和最小高度。
geometricError:屏幕几何误差,这里有两个geometricError是不一样的,root上一级的geometricError用来确定root的区域什么时候渲染。而
root.geometricError被用来确定下一级的tile什么时候渲染。也就是说,当geometricError的阈值达到之后,我们会渲染下一级的tile。就是每一级的geometricError都是对下级来说的。
refine:有两种值( "REPLACE" ) and ( "ADD" )。REPLAC可以直接替换掉上一级的tile。而ADD会在原先的tile的基础上进行增加。
boundingVolume:是包围盒的意思。这个参数用来做空间检索用的,我们通过这个包围盒在计算出这里面的tile是否需要渲染。这里我们暂时只准备支持AABB包围盒。即box。定义如下:
由12个数字组成,用于定义一个有方向的边界框。前三个元素定义了包围盒的中心点即(x,y,z)。接下来三个元素(索引3、4和5)定义了x轴方向的半长,再接下来的三个元素(索引6、7和8)定义了y轴方向的半长,最后三个元素(索引9、10和11)定义了Z轴方向的半长。
content:是即真实的tile的数据了,通过url来指向数据。这里我们可以直接指向一个mesh的格式,也可以再指向一个json的tile。这个json的格式和我们这个json的格式一样。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/216705.html原文链接:https://javaforall.net
