背景:
3dtiles文件在Cesium场景中加载时,是自带中心的坐标的,在做某个功能时需要将其定位到指定的经纬度。
思路:
Cesium中每个3dtile对象都有modelMatrix属性,通过向该属性赋值,改变其变换矩阵,可以实现对模型的平移、旋转、缩放。
代码:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 
 | async updateTilesetLocation(tileset, [lng, lat]) {
 
 let startPosition = tileset.boundingSphere.center;
 
 
 const height = Cesium.Cartographic.fromCartesian(startPosition).height
 
 
 const endPosition = Cesium.Cartesian3.fromDegrees(lng, lat, height);
 
 
 const translationVector = Cesium.Cartesian3.subtract(
 endPosition,
 startPosition,
 new Cesium.Cartesian3()
 );
 
 
 const translateMatrix = Cesium.Matrix4.fromTranslation(translationVector);
 const newMatrix = tileset.modelMatrix
 ? Cesium.Matrix4.multiply(
 tileset.modelMatrix,
 translateMatrix,
 new Cesium.Matrix4()
 )
 : translateMatrix;
 
 
 tileset.modelMatrix = newMatrix;
 }
 
 
 |