news 2026/6/26 22:06:56

Cesium 后期处理教程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Cesium 后期处理教程

cesium后期处理 ·postProcessStage· ▶ 在线运行案例

  • 案例合集:三维可视化功能案例(threehub.cn)
  • 开源仓库github地址:https://github.com/z2586300277/three-cesium-examples
  • 400个案例代码:网盘链接

你将学到什么

  • Cesium PostProcessStage 全屏后期管线

效果说明

本案例演示cesium后期处理效果:Cesium后处理阶段示例,该示例演示了如何使用Cesium的后处理效果来增强场景视觉效果;核心用到 Cesium。建议先打开文首在线案例查看动态画面,再对照下方源码逐步理解。

核心概念

  • Viewer聚合 Scene、Camera、Clock 与渲染循环,是 Cesium 应用入口。
  • Entity面向点线面/模型/标签的高层 API;与 Primitive 相比更适合交互与属性驱动。
  • 阅读下方完整源码时,建议从init/load/animate三条主线入手,再深入 shader 与工具函数。

实现步骤

  • 创建 Viewer,配置地形/影像(若案例需要)并设置初始相机
  • requestAnimationFrame循环中更新状态并 render(Cesium 为viewer.render或自动渲染)
  • 代码要点

    import * as Cesium from 'cesium'

    import { GUI } from 'dat.gui';

    /**

    • Cesium后处理阶段示例
    • 该示例演示了如何使用Cesium的后处理效果来增强场景视觉效果
    • 包括FXAA、Bloom、SSAO、模糊、黑白、夜视、描边、景深和运动模糊等效果
    */

    // 获取Cesium容器元素 const box = document.getElementById('box')

    // 初始化Cesium Viewer const viewer = new Cesium.Viewer(box, { // 禁用动画控件(左下角仪表) animation: false, // 禁用图层选择器(右上角图层选择按钮) baseLayerPicker: false, // 设置基础影像图层为ArcGIS影像服务 baseLayer: Cesium.ImageryLayer.fromProviderAsync(Cesium.ArcGisMapServerImageryProvider.fromUrl('https://server.arcgisonline.com/arcgis/rest/services/World_Imagery/MapServer')), // 禁用全屏按钮(右下角全屏选择按钮) fullscreenButton: false, // 禁用时间轴控件 timeline: false, // 禁用信息框 infoBox: false, })

    // 启用地形深度检测,使墙体能够贴合地形 viewer.scene.globe.depthTestAgainstTerrain = true // 隐藏Cesium Logo viewer._cesiumWidget._creditContainer.style.display = "none";

    // 获取后处理阶段集合 const stages = viewer.scene.postProcessStages; let myentity = viewer.entities.add({ position: Cesium.Cartesian3.fromDegrees(113.5, 34.5, 0), model: { uri: HOST + '/files/model/car.glb', minimumPixelSize: 100, maximumScale: 300 } }) viewer.zoomTo(myentity) /**

    • 清空所有特效
    • 禁用内置特效并移除所有自定义后处理阶段
    */ function clearAll() { // 禁用内置的FXAA抗锯齿效果 stages.fxaa.enabled = false; // 禁用内置的Bloom辉光效果 stages.bloom.enabled = false; // 禁用内置的环境光遮蔽效果 stages.ambientOcclusion.enabled = false; // 移除所有自定义添加的后处理阶段 stages.removeAll(); }

    /**

    • 应用指定名称的滤镜效果
    • @param {string} name - 滤镜名称
    */ function applyFilter(name) { clearAll(); // 先清空所有特效 switch (name) { case 'fxaa': // 启用快速近似抗锯齿(FXAA)效果 stages.fxaa.enabled = true; break; case 'bloom': // 启用辉光(Bloom)效果 stages.bloom.enabled = true; // 设置对比度参数 stages.bloom.uniforms.contrast = 128; // 设置亮度参数 stages.bloom.uniforms.brightness = -0.3; break; case 'ssao': // 启用屏幕空间环境光遮蔽(SSAO)效果 stages.ambientOcclusion.enabled = true; // 设置遮蔽强度 stages.ambientOcclusion.uniforms.intensity = 1.5; break; case 'blur': // 添加高斯模糊后处理阶段 stages.add(Cesium.PostProcessStageLibrary.createBlurStage()); break; case 'bw': // 添加黑白滤镜后处理阶段 stages.add(Cesium.PostProcessStageLibrary.createBlackAndWhiteStage()); break; case 'nv': // 添加夜视效果后处理阶段 stages.add(Cesium.PostProcessStageLibrary.createNightVisionStage()); break; case 'sil': { // 添加描边效果后处理阶段 const sil = stages.add(Cesium.PostProcessStageLibrary.createSilhouetteStage()); // 设置描边颜色为黄色 sil.uniforms.color = Cesium.Color.YELLOW; // 这里可以 push 选中物体:sil.selected.push(entity); break; } case 'dof': { // 添加景深效果后处理阶段 const dof = stages.add(Cesium.PostProcessStageLibrary.createDepthOfFieldStage()); // 设置焦距距离 dof.uniforms.focalDistance = 200; // 设置景深参数 dof.uniforms.delta = 1.0; // 设置高斯模糊参数 dof.uniforms.sigma = 2.0; break; } case 'mb': { // 添加运动模糊后处理阶段 const mb = stages.add(Cesium.PostProcessStageLibrary.createMotionBlurStage()); // 设置模糊强度 mb.uniforms.intensity = 0.8; break; } case 'none': // 无滤镜效果,保持清空状态 break; } }

    // ==================== GUI控制 ====================

    /**

    • 定义图形绘制操作对象
    • 包含各种滤镜效果的触发函数
    • @namespace obj
    */ const obj = { '无滤镜': () => { applyFilter('none'); }, 'FXAA': () => { applyFilter('fxaa'); }, 'Bloom': () => { applyFilter('bloom'); }, 'SSAO': () => { applyFilter('ssao'); }, 'Blur': () => { applyFilter('blur'); }, '黑白': () => { applyFilter('bw'); }, '夜视': () => { applyFilter('nv'); }, '描边': () => { applyFilter('sil'); }, '景深': () => { applyFilter('dof'); }, '运动模糊': () => { applyFilter('mb'); } };

    /**

    • 创建GUI控制面板
    • @type {dat.GUI}
    */ const gui = new GUI(); // 将操作对象添加到GUI控制面板 for (const key in obj) gui.add(obj, key)

    // 默认应用无滤镜效果 applyFilter('none');

    完整源码:GitHub

    小结

    • 本文提供cesium后期处理完整 Cesium.js 源码与在线 Demo,建议先运行案例再改 uniform/参数做二次实验
    • 更多 Cesium.js 实战案例见 three-cesium-examples 合集 与 GitHub 开源仓库
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/26 22:02:37

UPX脱壳实战:从自动化工具到手动逆向的完整指南

1. 项目概述:从“打包”到“拆包”的攻防博弈在软件安全与逆向分析的领域里,加壳与脱壳是一场永不停歇的攻防战。想象一下,你收到一个神秘的包裹,它被层层坚固的锁链和复杂的包装纸包裹,你无法直接看到里面的物品。加壳…

作者头像 李华
网站建设 2026/6/26 22:00:12

【亲测】HiBit Uninstaller:彻底卸载流氓软件的神器(附官网安装包)

HiBit Uninstaller 是一款专门为 Windows 系统设计的软件卸载工具,它不止是一个简单的卸载程序,更像是一位专业的“数字清道夫”,将那些盘踞在 Windows 系统中的顽固软件及其所有残留,连根拔起,让电脑重获清爽与高效。…

作者头像 李华
网站建设 2026/6/26 22:00:15

Arduino ESP32离线安装包制作与部署全攻略

1. 项目概述:为什么我们需要一个Arduino ESP32离线安装包?如果你玩过Arduino,又对ESP32这块功能强大的Wi-Fi/蓝牙双模芯片感兴趣,那你大概率经历过这样的场景:在一个网络环境不佳的会议室、实验室,或者干脆…

作者头像 李华
网站建设 2026/6/26 21:59:32

女性肠道养护与全维度养生科普,莱香发酵膳食辅助调理知识分享

一、日常吃哪些食物,可以自然养护肠道养护肠道核心两点:养好肠道有益菌、保证温和膳食纤维摄入,减少积食与毒素堆积,食材都为日常易得品类。1. 高膳食纤维食材(促蠕动,缓解排便不畅)粗粮类&…

作者头像 李华
网站建设 2026/6/26 21:57:23

5分钟学会无损视频剪辑:LosslessCut零画质损失完整指南

5分钟学会无损视频剪辑:LosslessCut零画质损失完整指南 【免费下载链接】lossless-cut The swiss army knife of lossless video/audio editing 项目地址: https://gitcode.com/gh_mirrors/lo/lossless-cut 还在为视频剪辑导出慢、画质下降而烦恼吗&#xff…

作者头像 李华
网站建设 2026/6/26 21:57:08

路由---页面切换

本次一共需要三个页面切换 需要写出三个文件 实例代码1:import router from ohos.router; Entry Component struct meng{State username:string ""State password:string ""State password2:string ""build() {Column({space:25}){Im…

作者头像 李华