function add3DTilesetDataTrans(url) { //viewer1.scene.globe.depthTestAgainstTerrain = true;//地形遮擋 //viewer1.scene.globe.depthTestAgainstTerrain = false;//去掉地形遮擋 tileset = viewer.scene.primitives.add(new Cesium.Cesium3DTileset({ url: url, //maximumScreenSpaceError: 20, //最大的屏幕空間誤差 //maximumNumberOfLoadedTiles: 10, //最大加載瓦片個數 })); tileset.readyPromise.then(function () { }).then(function () { if (tileset._root.transform == undefined) { console.log("瓦片未變換"); } tileset._root.transform = update3dtilesMaxtrix(params); viewer.zoomTo(tileset); }); }; function remove3DTilesetData(dataConfig) { var url = dataConfig; var primitives = viewer.scene.primitives; for (var i = 0; i < primitives.length; i++) { if (primitives._primitives[i]._url == url) { viewer.scene.primitives.remove(primitives._primitives[i]); } } } function add3DTilesetData(dataConfig) { //viewer1.scene.globe.depthTestAgainstTerrain = true;//地形遮擋 //viewer1.scene.globe.depthTestAgainstTerrain = false;//去掉地形遮擋 var tileset = viewer.scene.primitives.add(new Cesium.Cesium3DTileset({ url: dataConfig, //maximumScreenSpaceError: 20, //最大的屏幕空間誤差 //maximumNumberOfLoadedTiles: 10, //最大加載瓦片個數 })); tileset.readyPromise.then(function () { }); }; let params = { tx: 120.257, //模型中心X軸坐標(經度,單位:十進制度) ty: 31.226, //模型中心Y軸坐標(緯度,單位:十進制度) tz: 2800, //模型中心Z軸坐標(高程,單位:米) rx: 0, //X軸(經度)方向旋轉角度(單位:度) ry: 0, //Y軸(緯度)方向旋轉角度(單位:度) rz: -1 //Z軸(高程)方向旋轉角度(單位:度) }; function update3dtilesMaxtrix(params) { //旋轉 let mx = Cesium.Matrix3.fromRotationX(Cesium.Math.toRadians(params.rx)); let my = Cesium.Matrix3.fromRotationY(Cesium.Math.toRadians(params.ry)); let mz = Cesium.Matrix3.fromRotationZ(Cesium.Math.toRadians(params.rz)); let rotationX = Cesium.Matrix4.fromRotationTranslation(mx); let rotationY = Cesium.Matrix4.fromRotationTranslation(my); let rotationZ = Cesium.Matrix4.fromRotationTranslation(mz); //平移 let position = Cesium.Cartesian3.fromDegrees(params.tx, params.ty, params.tz); let m = Cesium.Transforms.eastNorthUpToFixedFrame(position); let scale = Cesium.Matrix4.fromUniformScale(0.85); // //縮放 Cesium.Matrix4.multiply(m, scale, m); //旋轉、平移矩陣相乘 Cesium.Matrix4.multiply(m, rotationX, m); Cesium.Matrix4.multiply(m, rotationY, m); Cesium.Matrix4.multiply(m, rotationZ, m); //賦值給tileset return m; }
1.定義一個目標位置,這個目標位置包括(目的地的經緯度(地理坐標系),高度,指定旋轉軸的旋轉角度)
2.通過使用update3dtilesMaxtrix這個方法,生成一個矩陣
3.修改3dtiles_root.transform將矩陣m賦值給它就可以實現變換(這個transform的屬性一定要在
tileset.readyPromise.then()之后才會出現,所以這句話必須放在它之后寫才行
)