cesium编程入门(六)添加 3D Tiles,并调整位置,贴地


声明:本文转载自https://my.oschina.net/u/592443/blog/1607308,转载目的在于传递更多信息,仅供学习交流之用。如有侵权行为,请联系我,我会及时删除。

添加 3D Tiles,并调整位置

3D Tiles 是什么

3DTiles数据集是cesium小组AnalyticlGraphics与2016年3月定义的一种数据集,3DTiles数据集以分块、分级渲染,将大数据量三维数据以分块,分层的形式组织起来,可以大量减轻浏览器和GPU的负担是一个优秀的,并且格式公开的数据格式。

3D Tiles将用于流式传输3D内容,包括建筑物,树木,点云和矢量数据。

参考 官网 3dtiles 介绍

3D Tiles

3D Tiles将用于流式传输3D内容,包括建筑物,树木,点云和矢量数据。

contextCapture 可以将无人机成果转换成Cesium支持的倾斜摄影成果,当前例子就是使用的这种成果。

数据的加载比较简单

var tileset = viewer.scene.primitives.add(new Cesium.Cesium3DTileset({     url: url,  //数据路径       maximumScreenSpaceError: 2,        //最大的屏幕空间误差     maximumNumberOfLoadedTiles: 1000,  //最大加载瓦片个数     modelMatrix: m //形状矩阵 })); 

但是问题在于生成的数据不一定是落在地面上,有可能是浮在空中的,例如:

这并不是我们想要的,我们希望拍摄的成果能贴到地面上,和地图能很好的融合在一起,类似这样

由于单个瓦片的位置信息是写到了数据中的(.b3dm和对应的json文件中),如果能整体调整加载后的tileset,就会是最好的选择,这里就要提到本文的主角:

modelMatrix

通过查看API文档,我们发现Cesium3DTile里面有一个属性,可以更改位置(当然通过查看源码也可以查这个)

transform : Matrix4              Scene/Cesium3DTile.js 88 The local transform of this tile 

说明通过矩阵运算是可以调整整个数据的显示位置的

一下说明矩阵平移的情况: 参考《WebGl编程指南》的第三章第四章

Tx,Ty,Tz就是我们需要设置的 x,y,z方向上的平移距离 由于Cesium的矩阵是列主序的,所以这里写成

    m = Cesium.Matrix4.fromArray([         1.0, 0.0, 0.0, 0.0,         0.0, 1.0, 0.0, 0.0,         0.0, 0.0, 1.0, 0.0,         x, y, z, 1.0     ]);       //生效     tileset._modelMatrix = m;     tileset.update(); 

这里我们只需要不断的修改 x,y,z,就可以调整物体的位置了

更简便的方式:Cesium.Matrix4.fromTranslation(translation, result) → Matrix4,通过调用函数不断修改x,y,z

获取 x,y,z 之后,在加载3D Tiles 时将modelMatrix 设置成目标 x,y,z值,就完成了

参考代码:lesson02

旋转部分读者可以自行测试一下

本文发表于2018年01月15日 16:35
(c)注:本文转载自https://my.oschina.net/u/592443/blog/1607308,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如有侵权行为,请联系我们,我们会及时删除.

阅读 3547 讨论 0 喜欢 0

抢先体验

扫码体验
趣味小程序
文字表情生成器

闪念胶囊

你要过得好哇,这样我才能恨你啊,你要是过得不好,我都不知道该恨你还是拥抱你啊。

直抵黄龙府,与诸君痛饮尔。

那时陪伴我的人啊,你们如今在何方。

不出意外的话,我们再也不会见了,祝你前程似锦。

这世界真好,吃野东西也要留出这条命来看看

快捷链接
网站地图
提交友链
Copyright © 2016 - 2021 Cion.
All Rights Reserved.
京ICP备2021004668号-1