美文网首页CesiumCesium实验室
Cesium 3Dtitles模型平移、旋转、缩放操作

Cesium 3Dtitles模型平移、旋转、缩放操作

作者: 魏无献 | 来源:发表于2020-03-11 10:42 被阅读0次

    var params = {

        tx: 110.5,  //模型中心X轴坐标(经度,单位:十进制度)

        ty: 30,     //模型中心Y轴坐标(纬度,单位:十进制度)

        tz: 1120,    //模型中心Z轴坐标(高程,单位:米)

        rx: 60,     //X轴(经度)方向旋转角度(单位:度)

        ry: 30,     //Y轴(纬度)方向旋转角度(单位:度)

        rz: 0 ,      //Z轴(高程)方向旋转角度(单位:度)

        scale: 1    //缩放系数

    };

    function update3dtilesMaxtrix(tileset) {

       //旋转

        var mx = Cesium.Matrix3.fromRotationX(Cesium.Math.toRadians(params.rx));

        var my = Cesium.Matrix3.fromRotationY(Cesium.Math.toRadians(params.ry));

        var mz = Cesium.Matrix3.fromRotationZ(Cesium.Math.toRadians(params.rz));

        var rotationX = Cesium.Matrix4.fromRotationTranslation(mx);

        var rotationY = Cesium.Matrix4.fromRotationTranslation(my);

        var rotationZ = Cesium.Matrix4.fromRotationTranslation(mz);

        //平移

        var position = Cesium.Cartesian3.fromDegrees(params.tx, params.ty, params.tz);

        //tx,ty,tz为分量

        //var position = Cesium.Cartesian3.fromArray([params.tx, params.ty, params.tz]);

        var m = Cesium.Transforms.eastNorthUpToFixedFrame(position);

        //旋转、平移矩阵相乘

        Cesium.Matrix4.multiply(m, rotationX, m);

        Cesium.Matrix4.multiply(m, rotationY, m);

        Cesium.Matrix4.multiply(m, rotationZ, m);

        //缩放

        var scaleM = Cesium.Matrix4.fromUniformScale(params.scale);

        Cesium.Matrix4.multiply(m, scaleM, m);

        //赋值给tileset

        tileset._root.transform = m;

    }

    //高度调整

    //直接调用函数,调整高度,height表示物体离地面的高度

    function changeHeight(tileset, height)

        {  

                height =Number(height);

                if(isNaN(height)) return;

                var cartographic = Cesium.Cartographic.fromCartesian(tileset.boundingSphere.center);

                var  surface = Cesium.Cartesian3.fromRadians(cartographic.longitude, cartographic.latitude, cartographic.height);

               varoffset = Cesium.Cartesian3.fromRadians(cartographic.longitude, cartographic.latitude,height);

               vartranslation = Cesium.Cartesian3.subtract(offset, surface,newCesium.Cartesian3());

               tileset.modelMatrix = Cesium.Matrix4.fromTranslation(translation);

    }

    来源于示例,感谢源作者的分享

    相关文章

      网友评论

        本文标题:Cesium 3Dtitles模型平移、旋转、缩放操作

        本文链接:https://www.haomeiwen.com/subject/fmfqjhtx.html