【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;
        });
    }

}
相关推荐
LIUAWEIO12 小时前
vue里面下载配置使用zepto vue中怎样使用zepto
javascript·vue.js·es6·zepto
lantian12 小时前
TypeScript 三斜线指令完全指南:从入门到理解为什么不再需要它
前端·javascript·vue.js
用户9385156350712 小时前
从"用栈实现队列"说起:深入理解 JavaScript 原型式面向对象
javascript
鹏多多12 小时前
锐评CSDN最近上线的AI数字营销:烂完之前最后再捞一笔
前端·后端·程序员
先吃饱再说12 小时前
从 WeUI 按钮组件学 BEM 命名规范:让 CSS 不再难维护
前端·代码规范
槑有老呆12 小时前
从前端 HTTP 请求到 LLM 接口调用:一篇文章带你彻底搞懂
前端
ZengLiangYi12 小时前
AI 编程工具的数据格式为什么不能统一
javascript·后端·架构
陈_杨12 小时前
鸿蒙APP开发-带你走进旧物集的时间线与收藏管理
前端·javascript
尼斯湖皮皮怪12 小时前
iceCoder双模详解
javascript
拂尘子12 小时前
前端屎山代码救星:这个 MCP 把 7000 行页面压成 60 行骨架,Token 直接省掉 90%+
前端·ai编程·mcp