Cesium控制3dTiles抬高

原理

只做抬高思路很简单
1、得到当前模型矩阵变换后的位置(matrix)
2、获取模型变换后平移的部分(translation)
3、根据平移的部分转换为地理坐标(C3->地理)
4、在该地理坐标的基础上加用户需要抬升的高度,再转换为C3的形式(NewTranslation)
5、把NewTranslation赋值给matrix
6、最后乘上原始模型矩阵的逆,再赋值给modelMatrix即可实现抬高

补充

方法有很多,这也只是其中的方法,但是万变不离其宗,都是围绕模型矩阵进行的变换。

代码

    //控制3dTiles的抬高
    raiseCesium3DTileset(tileset, height) {
        //得到当前模型矩阵经过变换后的位置
        const matrix = Cesium.Matrix4.multiply(
        tileset.modelMatrix,//表示在初始位置上做了什么变换(即所有的变换)
        tileset.root.transform,//规定了初始位置在哪里
        new Cesium.Matrix4());

        //平移的部分
        const translation = Cesium.Matrix4.getTranslation(
            matrix,
            new Cesium.Cartesian3()
        );
        //转为地理坐标
        const cartographic = Cesium.Cartographic.fromCartesian(translation);
         //根据当前模型平移的位置,改变其高度
        const newTranslation = Cesium.Cartesian3.fromRadians(
            cartographic.longitude,
            cartographic.latitude,
            cartographic.height + height
            );
        //设置平移矩阵变换
        Cesium.Matrix4.setTranslation(matrix, newTranslation, matrix);
        const inverse = Cesium.Matrix4.inverse(
              tileset.root.transform,
              new Cesium.Matrix4()
            );

        return Cesium.Matrix4.multiply(
              matrix,
              inverse,
              new Cesium.Matrix4()
            );
          },
posted @ 2022-11-16 22:05  百年内必成大牛  阅读(392)  评论(0编辑  收藏  举报