倾斜摄影技术现在越来越常见了。什么园区三维建模、城市三维重建、地形可视化,背后用的基本都是这玩意儿。而在实际开发中,倾斜摄影数据一般都是以3D Tiles格式存储的。
好消息是,MapV-Three框架把3D Tiles的加载渲染封装得非常简单。今天我们就来看看怎么用 Default3DTiles 这个组件快速实现倾斜摄影的渲染。
在正式开始之前,先简单科普一下。
3D Tiles 是Cesium推出的一种用于传输大规模三维地理空间数据的开放标准。说人话就是:把海量的三维模型数据切成小块(瓦片),然后根据视角和距离按需加载,这样既能保证显示效果,又不会卡到爆炸。
常见的倾斜摄影、BIM模型、点云数据,都可以转成3D Tiles格式。
在MapV-Three中,加载3D Tiles数据主要用到Default3DTiles这个通用的3D Tiles加载器,适用于大部分场景
废话不多说,直接上代码。
import {useRef} from 'react';
import * as mapvthree from '@baidu/mapv-three';
const ref = useRef();
async function callback(engine) {
const tile = engine.add(new mapvthree.Default3DTiles({
url: 'data/3dtiles/tileset.json',
}));
return engine;
}
<App ref={ref} initConfig={{
map: {
center: [105.931684, 29.349367, 280],
range: 2000,
pitch: 75,
provider: null,
}
}} callback={callback} />就这么几行代码,搞定!
核心就是:
new mapvthree.Default3DTiles() 创建实例url 参数,指向3D Tiles的入口文件(通常是 tileset.json)engine.add() 添加到场景中运行后,地图上就会显示出三维建模了。
地图初始化配置:
center:地图中心点坐标,格式是 [经度, 纬度, 高度]。高度这个参数很重要,直接影响初始视角range:相机距离地面的高度(米)pitch:俯仰角,0是平视,90是俯视。倾斜摄影一般设置60-80度比较合适provider: null:不加载底图,因为我们要看的是三维模型本身tileset.json 是什么:
这是3D Tiles数据的元数据文件,里面定义了瓦片的组织结构、坐标系、细节层级等信息。只要有这个文件,引擎就知道该怎么加载整个数据集。
虽然代码很简单,但实际开发中还是会遇到一些问题。
可能的原因:
tileset.json 路径不对排查方法:
tileset.json 文件中的 region 或 boundingVolume 字段,确认模型的地理位置center 和 range 参数,试着飞到模型附近可能的原因:
优化建议:
原因:坐标系不一致。
倾斜摄影数据可能是WGS84、GCJ02或其他坐标系,而MapV-Three可以使用多种坐标系。如果不匹配,模型会跑偏。
解决方法:
倾斜摄影数据通常都很大(几个GB甚至几十GB),加载和渲染都是性能瓶颈。以下是一些优化建议:
range,不要离模型太近(太近会加载高精度瓦片,很吃性能)用MapV-Three加载倾斜摄影数据,核心就是 Default3DTiles 这个组件。
基础用法:
const tile = engine.add(new mapvthree.Default3DTiles({
url: 'tileset.json',
}));注意事项:
center、range、pitch)基本上,只要数据准备好了,代码就是这么几行的事儿。倾斜摄影听起来高大上,但用起来其实挺简单的。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。