栏目分类:
子分类:
返回
文库吧用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
文库吧 > IT > 软件开发 > 后端开发 > Python

三维数据格式3DTiles

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

三维数据格式3DTiles

一、3D Tiles来源和介绍

它是Cesium于2016年3月定义的一种三维模式瓦片数据结构,它将海量的三维数据用分块、分层的形式组织起来,很大程度上减轻了浏览器的负担,除此外还提供了细节层次的LOD(Levels of Detail 多细节层次)功能,在远观时,降低模型的面数和精度,拉近后再将细节加载出来,大大增强了页面的加载速度,更可以用于跨桌面使用,使得web端和移动应用程序共享,主要适用于静态场景

二、3D Tiles数据特点
  1. 开放性
    它是一个开放式的数据规范,我们可以根据实际需求设定三维模型的大小和范围,此外还能适配多种空间分区方案,如:普通网格、四叉树、八叉树等

    四叉树:它是一种树形数据结构,它的每个节点下之多可以有四个子节点。通常把二维空间细分为四个区域,并把该区域里的相关信息存入到四叉树节点中,四叉树的每一个节点代表一个矩形区域,每一个矩形区域又可分为四个小矩形区域

    八叉树:相比四叉树,八叉树是将二维空间延伸到了三维空间,树种的子节点只会有八个或者零个,每一个节点同样用于存储数据

  2. 异质性
    支持将不同类型的三维模型数据,如普通模型数据加倾斜摄影数据加自绘几何数据放在一起,转化为统一标准的数据集,让它们可以在同一场景下显示出来

  3. 专为三维可视化设计
    专为三维可视化设计,并在其中引入了图形领域的技术,在不满足特定条件的情况下,并不会对场景内的模型做整个渲染,而是只会渲染个轮廓,大大降低了计算量,使得浏览器请求到数据后,渲染的流程也更加的简单。同时,因为三维模型预先处理成了分块的三维瓦片格式,所以也减少了WebGL绘制请求的数量。

  4. 可交互性
    其支持对加载模型的拾取,和样式的修改,大量加载以后,可以对其中的单独模型进行交互,如:高亮显示鼠标悬停处的模型、或进行删除等,也可根据建筑模型的高度和年代,设置不同的显示效果而不需要重新更新代码

三、3D Tiles格式文件代码详解

3D Tiles的格式是由两个部分组成的:
其一是如下的json格式的数据,这里的asset是一个包含整体tileset元素属性的对象,其中的version属性是定义3D Tiles版本的字符串,此外这里还可以选填一个tilesetVersion属性,它可以用于定义特定应用中的版本号,geometricError属性定义了一个非误差单位,低于这个误差值,瓦片集不会被渲染(单位:米),root属性用于定于根瓦片。它的子项transform也是一个可选项,它的作用是在加载大量模型或者建筑物的情况下,单个模型的点云瓦片集能在它自己的坐标系中定义,其内的数据是一个4*4的仿射变换矩阵,以列主序存储,用来实现从瓦片局部坐标系到父瓦片或根瓦片坐标系的变换。root内部也有一个geometricError属性,前者是整个瓦片不被渲染的误差,后者只是当前瓦片集被渲染的误差。content属性通过url引入文件,其支持的二进制文件格式有.b3dm、.i3dm、.pnts等,甚至可以在其中再放入一个3D Tiles文件,前提是不可以自己引用自己。content上方的refine属性定义的是LOD细化的方法,简单来说就是瓦片是如何切换的。
构成3D Tiles的第二部分就是其引用的瓦片数据文件了,.b3dm就是我们用于渲染数据的文件

//json文件
{
  "asset": {
    "version": "1.0"
  },
  "geometricError": 70,
  "root": {
    "boundingVolume": {
      "box": [
        0,
        0,
        10,
        100,
        0,
        0,
        0,
        100,
        0,
        0,
        0,
        10
      ]
    },
    "transform": [
      0.9686356343768792,
      0.24848542777253735,
      0,
      0,
      -0.15986460744966327,
      0.623177611820219,
      0.765567091384559,
      0,
      0.19023226619126932,
      -0.7415555652213445,
      0.6433560667227647,
      0,
      1215011.9317263428,
      -4736309.3434217675,
      4081602.0044800863,
      1
    ],
    "geometricError": 70,
    "refine": "ADD",
    "content": {
      "uri": "buildings.b3dm"
    },
    "children": [
      {
        "boundingVolume": {
          "box": [
            0,
            0,
            0,
            100,
            0,
            0,
            0,
            100,
            0,
            0,
            0,
            15
          ]
        },
        "transform": [
          0.35355339059327373,
          0.3535533905932738,
          0,
          0,
          -0.3535533905932738,
          0.35355339059327373,
          0,
          0,
          0,
          0,
          0.5,
          0,
          0,
          0,
          5,
          1
        ],
        "geometricError": 0,
        "content": {
          "uri": "instances.i3dm"
        }
      }
    ]
  }
}

四、3D Tiles数据使用方法

b3dm格式瓦片集主要用于加载批量的模型,pnts格式瓦片集用于加载点云数据模型,cmpt瓦片集,允许一个cmpt文件内嵌多个其他类型的瓦片。

// 3DTiles并不是Entity的一部分,而是属于更加底层的primitives
var tileset = viewer.scene.primitives.add(
  // 用于实例化
  new Cesium.Cesium3DTileset({
    // 放入json文件的路径
    url:"../../lib/TilesetWithViewerRequestVolume/tileset.json",
    maximumScreenSpaceError: 2, //最大的屏幕空间误差,数字越低,视觉效果越好
    maximumNumberOfLoadedTiles: 1000, // 最大加载瓦片个数用于给定一定的限制,防止数据量过大,占用内存过高
  })
)
转载请注明:文章转载自 www.wk8.com.cn
本文地址:https://www.wk8.com.cn/it/1037579.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 wk8.com.cn

ICP备案号:晋ICP备2021003244-6号