背景:
3dtiles文件在Cesium场景中加载时,是自带中心的坐标的,在做某个功能时需要将其定位到指定的经纬度。
思路:
Cesium中每个3dtile对象都有modelMatrix属性,通过向该属性赋值,改变其变换矩阵,可以实现对模型的平移、旋转、缩放。
代码:
1 2 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; }
|