zoukankan      html  css  js  c++  java
  • 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()之后才会出现,所以这句话必须放在它之后写才行

  • 相关阅读:
    LPTHW 笨办法学python 20章
    LPTHW 笨方法学python 19章
    LPTHW 笨方法学python 18章
    LPTHW 笨方法学习python 16章
    hadoop删除节点。
    url中的百分号转译
    thrift编译安装
    python学习:函数的学习
    jsp静态导入和动态导入 笔记
    简要描述cookie和session的区别:
  • 原文地址:https://www.cnblogs.com/1521681359qqcom/p/12658623.html
Copyright © 2011-2022 走看看