今天先把3Dtiles标准数据基本结构给大家讲一下(因为以前已经把ppt写好了,所以此文章很快能复制出来)。
现在做三维的人越来越多了,市面上主流用的都是cesium底层,今天就把他的标准服务结构3dtiles给大家讲一讲。
一、3Dtiles标准结构如下图所示:
1、包括瓦片集数据(json,瓦片空间组织)和瓦片数据(tile,单个瓦片内所有三维模型与属性)
2、瓦片数据包括五类b3dm(Batched3DModel,批量3D模型)、i3dm(Instanced3DModel,实例3D模型)、pnts(PointCloud,点云)、vctr(VectorData,矢量数据)cmpt(Composite,复合数据)。
二、具体的json格式如下图所示
1、asset:存储描述整个瓦片集的元数据
2、properties:记录了该瓦片集所存储的要素的元数据,例如整个瓦片集中要素的地理空间范围、要素的id范围等。
3、refine:属性表示瓦片精化方式(add、replace两种方式)
4、root(整个瓦片集索引树的根节点对象):表示整个瓦片集的空间组织结构
5、refine:属性表示瓦片精化方式(add、replace两种方式)
6、children子节点数组形式
7、content:瓦片实际渲染的内容(瓦片数据的路径),根节点空,其中的uri属性存放路径(相对与全路径都可以),children中的content属性存放json路径,
Bounding box:box属性是一个由12个数字组成的数组。 前三个元素定义框中心的x,y和z值。 接下来的三组元素分别定义x,y,z轴方向和半轴长度,值的大小就是每个方向的长度
Bounding region:region属性是一个由六个数字组成的数组,这些数字用纬度,经度和高度坐标定义了地理区域,其坐标顺序为[西,南,东,北,最小高度,最大高度]。 纬度和经度在EPSG 4979中定义的WGS 84基准中,以弧度表示。 高度在WGS 84椭圆形上方(或下方)以米为单位。其每条边都和坐标轴平行。
Bounding sphere:sphere属性是由四个数字组成的数组,这些数字定义了一个最小包围球。 前三个元素定义了在右手3轴(x,y,z)直角坐标系中x轴的x,y和z值,其中z轴位于上方。 最后一个元素以米为单位定义半径。
2、transform(可选,位置变换矩阵)定义了一个4x4的变换矩阵 ,通过此属性,每个Tile都可以存自己局部坐标系的坐标,通过自己的transform矩阵变换到父节点的坐标系中。对box或sphere表示的boundingVolume起作用,对region无效。transform不是必要属性,省略时等价于单位矩阵E。
4、geometricError(瓦片集的几何体误差):用来确定瓦片切换层级的,即控制LOD的。(height 即浏览器当前运行着 Cesium 的那个 canvas 的像素高度;distance 是当前状态下,摄像机的世界坐标位置到瓦片中心位置的距离,单位是米; sseDenominator 为视锥的近裁切面距离与视锥高的比值,窗口固定的时候是一个固定值)
瓦片的屏幕空间误差大致相当于如果在瓦片的位置上渲染一个半径等于瓦片几何误差的球体,所绘制的像素宽度数。如果这个值超过了maximumScreenSpaceError,瓦片就会细化到它的后代。
var ScreenSpaceError = (geometricError * height) / (distance * sseDenominator);