【Cesium】根据相机距离隐藏或显示模型

1.根据相机到模型的距离,显示或隐藏具体模型

/**
 * @description: 模型的可见性设置
 * @param entity {Entity} 隐藏的model实体
 * @param distance {Number} 可见距离
 * @return {*}
 */

function showOrHidden(entity, distance) {

    let postRenderCallback = () => {
        var cameraPosition = viewer.camera.positionWC; // 获取摄像机位置
        var modelPosition = entity.position.getValue(Cesium.JulianDate.now()); // 获取模型位置
        if (!Cesium.defined(modelPosition)) {
            return; // 如果模型位置未定义,则退出函数
        }

        // 计算摄像机与模型之间的距离
        var distance1 = Cesium.Cartesian3.distance(cameraPosition, modelPosition);

        // 根据距离设置模型的可见性
        if (distance1 < distance) {
            entity.show = true; // 当距离小于distance米时,显示模型
        } else {
            entity.show = false; // 当距离大于等于1000米时,隐藏模型
        }
    }

    viewer.scene.postRender.addEventListener(postRenderCallback)
}

2.根据相机到地面距离,显示或隐藏所有模型、粒子和图元

/**
 * @description: 所有entity和primitive的可见性设置
 * @param distance {Number} 可见距离
 * @return {*}
 */
function showOrHiddenAll(distance) {
    viewer.camera.changed.addEventListener(() => {
        const height = viewer.scene.globe.ellipsoid.cartesianToCartographic(viewer.camera.position).height;;
        if (height > distance) {
            hidePrimitivesAndEntities();
        } else {
            showPrimitivesAndEntities();
        }
    });

    function hidePrimitivesAndEntities() {
        const primitives = viewer.scene.primitives;

        for (let i = 0; i < primitives.length; i++) {
            primitives.get(i).show = false;
        }

        const entities = viewer.entities;

        entities.values.forEach(function(entity) {
            entity.show = false;
        });
    }

    function showPrimitivesAndEntities() {
        const primitives = viewer.scene.primitives;

        for (let i = 0; i < primitives.length; i++) {
            primitives.get(i).show = true;
        }

        const entities = viewer.entities;

        entities.values.forEach(function(entity) {
            entity.show = true;
        });
    }

}

相关推荐

  1. Cesium根据相机距离隐藏显示模型

    2024-03-20 15:32:05       43 阅读
  2. Cesium.js相关官网博客

    2024-03-20 15:32:05       51 阅读
  3. cesium-2】Cesium相机系统

    2024-03-20 15:32:05       61 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-20 15:32:05       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-20 15:32:05       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-20 15:32:05       82 阅读
  4. Python语言-面向对象

    2024-03-20 15:32:05       91 阅读

热门阅读

  1. Vue2 和Vue3 双向数据绑定的区别和原理

    2024-03-20 15:32:05       42 阅读
  2. Leetcode-03-无重复字符的最长子串

    2024-03-20 15:32:05       43 阅读
  3. 我的自建博客之旅03之vuepress和Vitepress

    2024-03-20 15:32:05       42 阅读
  4. kill死锁(当你找不到sessionid的时候)

    2024-03-20 15:32:05       34 阅读
  5. 用python实现华容道小游戏

    2024-03-20 15:32:05       40 阅读
  6. Selenium WebDriver提供By.CSS_SELECTOR定位元素方法

    2024-03-20 15:32:05       41 阅读
  7. php Zend Opcache 配置

    2024-03-20 15:32:05       40 阅读