Cesium變換3DTiles的位置(平移旋轉縮放)


 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()之后才會出現,所以這句話必須放在它之后寫才行

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM