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

}
相关推荐
子兮曰4 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰4 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
前端小万4 天前
写公众号赚了 3000 块后,我做了一款叫 "一键成稿" 的软件
前端·微信小程序
爱勇宝4 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
三十而立洋4 天前
Cookie 详解:从产生到安全,一次讲透
前端·javascript
卡布鲁4 天前
把一个 Vite + Vue3 应用塞进 qiankun (React + Umi3) 主站:十个坑的复盘
前端·javascript·react.js
李少兄4 天前
JavaScript 隐式全局变量解析
javascript
汉堡大王95274 天前
Jev:不是聊天机器人, 而是一个智能 if 语句
前端·人工智能·后端
梦想很大很大4 天前
从运行事实到回归证据:Workrun 的 Telemetry 与 Evaluation 实践
前端·人工智能·后端
计算机魔术师4 天前
Meta Muse agent 接入 Shopify 的 Shop Pay 实现代理式购物
前端