Cesium 动态围墙教程
动态围墙 ·Dynamic Wall· ▶ 在线运行案例案例合集三维可视化功能案例threehub.cn开源仓库github地址https://github.com/z2586300277/three-cesium-examples400个案例代码:网盘链接你将学到什么Cesium Entity 高层实体 API效果说明本案例演示动态围墙效果基于 WebGL 实现「动态围墙」可视化效果附完整可运行源码核心用到 Cesium。建议先打开文首在线案例查看动态画面再对照下方源码逐步理解。核心概念Viewer聚合 Scene、Camera、Clock 与渲染循环是 Cesium 应用入口。Entity面向点线面/模型/标签的高层 API与 Primitive 相比更适合交互与属性驱动。阅读下方完整源码时建议从init/load/animate三条主线入手再深入 shader 与工具函数。实现步骤创建 Viewer配置地形/影像若案例需要并设置初始相机在requestAnimationFrame循环中更新状态并 renderCesium 为viewer.render或自动渲染代码要点import * as Cesium from cesiumconst box document.getElementById(box)const viewer new Cesium.Viewer(box, {animation: false,//是否创建动画小器件左下角仪表baseLayerPicker: false,//是否显示图层选择器右上角图层选择按钮baseLayer: Cesium.ImageryLayer.fromProviderAsync(Cesium.ArcGisMapServerImageryProvider.fromUrl(https://server.arcgisonline.com/arcgis/rest/services/World_Imagery/MapServer)),fullscreenButton: false,//是否显示全屏按钮右下角全屏选择按钮timeline: false,//是否显示时间轴infoBox: false,//是否显示信息框})// 优雅永不过时 改编自 https://juejin.cn/post/7431590701496533030 class DynamicWallMaterialProperty { constructor(options) { // 默认参数设置 this._definitionChanged new Cesium.Event() // 材质定义变更事件 this._color undefined // 颜色属性 this._colorSubscription undefined // 颜色变化订阅 this.color options.color // 从选项中获取颜色 this.duration options.duration // 持续时间 this.trailImage options.trailImage // 路径图像 this._time new Date().getTime() // 当前时间戳 this._viewer options.viewer // Cesium 视图对象 } // 返回材质类型 getType(time) { return MaterialType // 返回材质类型名称 } getValue(time, result) { if (!Cesium.defined(result)) { result {} // 如果结果未定义则初始化为空对象 } result.color Cesium.Property.getValueOrClonedDefault( this._color, // 获取颜色值 time, // 当前时间 Cesium.Color.WHITE, // 默认颜色为白色 result.color // 结果对象中的颜色属性 ) // 使用自定义的路径图像 result.image this.trailImage // 计算时间进度 if (this.duration) { result.time ((new Date().getTime() - this._time) % this.duration) / this.duration } this._viewer.scene.requestRender() // 请求重新渲染场景 return result } // 比较两个 DynamicWallMaterialProperty 对象是否相等 equals(other) { return ( this other || // 判断是否为同一对象 (other instanceof DynamicWallMaterialProperty // 判断是否为 DynamicWallMaterialProperty 的实例 Cesium.Property.equals(this._color, other._color)) // 比较颜色属性 ) } }function _getDirectionWallShader(options) { if (options options.get) { // 定义了一个函数 czm_getMaterial输入参数为 materialInput返回值为 czm_material 类型的材质。 var materail czm_material czm_getMaterial(czm_materialInput materialInput) { // 调用 czm_getDefaultMaterial 函数获取一个默认的材质实例并将其存储在 material 变量中 czm_material material czm_getDefaultMaterial(materialInput); // 获取纹理坐标st的二维向量 vec2 st materialInput.st;// 垂直方向动态效果 if (options.freely vertical) { //由下到上 // texture(image, vec2(u,v))st.s 是水平方向上的纹理坐标st.t 是垂直方向上的纹理坐标。 // 如果要实现上下垂直滚动的效果就要设置st.t随时间的动态而st.s值不变。 // 如果要实现左右水平滚动的效果就要设置st.s随时间的动态而st.t值不变。 materail // 纹理采样依据时间动态变化,fract 函数用于计算余数使纹理坐标在[0, 1)范围内循环。 vec4 colorImage texture(image, vec2(fract(st.s), fract(float( options.count )*st.t options.direction time)));\n } else { // 水平方向的动态效果 //逆时针 materail vec4 colorImage texture(image, vec2(fract(float( options.count )*st.s options.direction time), fract(st.t)));\n console.log(materail2: , materail) } //泛光 materail vec4 fragColor; fragColor.rgb (colorImage.rgbcolor.rgb) / 1.0; fragColor czm_gammaCorrect(fragColor); material.diffuse colorImage.rgb; material.alpha colorImage.a; material.emission fragColor.rgb; return material; }return materail } }Object.defineProperties(DynamicWallMaterialProperty.prototype, { isConstant: { get: function () { return false // 返回材质是否是常量动态材质返回 false }, }, definitionChanged: { get: function () { return this._definitionChanged // 返回定义变更事件 }, }, color: Cesium.createPropertyDescriptor(color), // 创建颜色属性描述符 })var MaterialType wallType parseInt(Math.random() * 1000) // 将材质添加到缓存中 Cesium.Material._materialCache.addMaterial(MaterialType, { fabric: { type: MaterialType, // 设置材质类型 uniforms: { color: new Cesium.Color(1.0, 0.0, 0.0, 0.5), // 设置颜色属性 image: , // 设置图像路径 time: -20, // 设置时间属性 }, source: _getDirectionWallShader({ get: true, count: 3.0, freely: vertical, //或者standard direction: , }), }, translucent: function (material) { return true // 确定材质是否是半透明的 }, })let positions Cesium.Cartesian3.fromDegreesArray([ 113.8236839, 22.528061, 113.9236839, 22.628061, 114.0236839, 22.528061, 113.9236839, 22.428061, 113.8236839, 22.528061, ]) // 绘制墙体 const wall viewer.entities.add({ name: 立体墙效果, wall: { positions: positions, // 设置高度 maximumHeights: new Array(positions.length).fill(3000), minimumHeights: new Array(positions.length).fill(0), material: new DynamicWallMaterialProperty({ viewer, trailImage: FILE_HOST /images/texture/flyLine1.png, color: Cesium.Color.RED, duration: 1500, }), }, }) viewer.zoomTo(wall)完整源码GitHub小结本文提供动态围墙完整 Cesium.js 源码与在线 Demo建议先运行案例再改 uniform/参数做二次实验更多 Cesium.js 实战案例见 three-cesium-examples 合集 与 GitHub 开源仓库

相关新闻

Floccus WebDAV认证原理与配置:Basic与Digest机制详解

Floccus WebDAV认证原理与配置:Basic与Digest机制详解

1. 项目概述:为什么Floccus的WebDAV认证值得深究?如果你和我一样,是个重度书签依赖者,同时又对数据自主权有点“洁癖”,那么Floccus这款浏览器扩展大概率已经躺在你的插件栏里了。它最大的魅力在于,能把浏览…

2026/6/26 22:18:39阅读更多 →
kubectl:Kubernetes 集群管理,靠它一个就够了

kubectl:Kubernetes 集群管理,靠它一个就够了

文章目录kubectl:Kubernetes 集群管理,靠它一个就够了1、 这玩意儿是干嘛的2、 为什么不用别的3、 怎么装4、 日常怎么用5、 适合谁用kubectl:Kubernetes 集群管理,靠它一个就够了 kubectl 在 GitHub 上有 3.2K Star。 这是 Kub…

2026/6/26 22:18:39阅读更多 →
【IDEA书签功能高阶用法】:20年JetBrains实战经验总结的7个隐藏技巧,90%开发者从未用过

【IDEA书签功能高阶用法】:20年JetBrains实战经验总结的7个隐藏技巧,90%开发者从未用过

更多请点击: https://kaifayun.com 第一章:书签功能的本质与底层机制解析 书签并非简单的 URL 快捷方式,而是浏览器持久化存储系统与导航引擎协同作用的结果。其本质是一组结构化的元数据,包含目标 URL、标题、创建时间、父文件…

2026/6/26 22:18:39阅读更多 →
Navisworks2027下载安装教程(附安装包)Navisworks保姆级安装教程

Navisworks2027下载安装教程(附安装包)Navisworks保姆级安装教程

文章目录一、Navisworks2027 软件简介二、Navisworks2027 下载三、Navisworks2027 安装教程Navisworks2027安装失败怎么办?常见报错及解决方法一、Navisworks2027 软件简介 Navisworks Manage 2027 是 Autodesk 旗下主打的 BIM 协同审查平台,在项目全生…

2026/6/27 2:39:21阅读更多 →
Raft 日志复制落地产坑:从一致性协议到生产级容错的距离

Raft 日志复制落地产坑:从一致性协议到生产级容错的距离

Raft 日志复制落地产坑:从一致性协议到生产级容错的距离 一、共识协议的"理论完美"与"工程现实" Raft 协议以"易理解性"著称,论文中描述的 Leader 选举、日志复制、安全性证明逻辑清晰。但在生产环境中部署 Raft 集群后&a…

2026/6/27 2:39:21阅读更多 →
秒杀页面的最后一公里:前端高并发场景下的请求调度与降级策略

秒杀页面的最后一公里:前端高并发场景下的请求调度与降级策略

秒杀页面的最后一公里:前端高并发场景下的请求调度与降级策略 一、10 万 QPS 压垮前端的瞬间:流量洪峰下的真实崩溃链路 大促秒杀活动开始前 5 秒,前端监控面板显示页面白屏率从 0.1% 飙升到 35%。后端服务还在正常运行,API 响应时…

2026/6/27 2:39:21阅读更多 →
web应用技术--第9次课后作业

web应用技术--第9次课后作业

采用restful风格完整自己项目的某个功能的增删改查的项目代码用restful之前的页面:之后:

2026/6/27 2:39:21阅读更多 →
Spring Boot 自动装配源码拆解:从 @EnableAutoConfiguration 到条件注册的全链路追踪

Spring Boot 自动装配源码拆解:从 @EnableAutoConfiguration 到条件注册的全链路追踪

Spring Boot 自动装配源码拆解:从 EnableAutoConfiguration 到条件注册的全链路追踪 一、框架"黑盒"带来的排障困境 Spring Boot 的自动装配机制让开发者只需引入 starter 依赖即可获得完整的功能配置,这种"约定优于配置"的设计大…

2026/6/27 2:39:21阅读更多 →
最新NDM中文绿色汉化版

最新NDM中文绿色汉化版

链接:https://pan.quark.cn/s/5662fcb6aedcNeat Download Manager(以下简称NDM)是一款免费小巧的网络资源下载器。说白了就是和迅雷、IDM(Internet Download Manager)类似。和IDM相比,NDM占用空间非常小&am…

2026/6/27 2:34:20阅读更多 →
【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体 一文搞定到底什么是智能体【人工智能】一文搞定到底什么是智能体一. LM,WorkFlow,Agent分别有什么么不同二. Agent的思考过程是怎样的三. Agent的五个核心部分1)LLM2)Prompt3)Me…

2026/6/26 11:03:22阅读更多 →
嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

1. 嵌入式GUI控件:从原理到实战的深度解析在嵌入式系统开发中,图形用户界面(GUI)的设计与实现往往是项目从“能用”到“好用”的关键一跃。不同于资源充沛的PC或移动平台,嵌入式设备的GUI需要在有限的CPU性能、内存空间…

2026/6/26 4:15:25阅读更多 →
Google AI Studio 300美元额度的真相与实战指南

Google AI Studio 300美元额度的真相与实战指南

1. 这300美金不是“送钱”,而是Google埋下的第一道技术门槛 你看到标题里那个醒目的“$300美金”时,第一反应可能是:又一个免费额度?领完就完事?我亲手试过——这300美金根本不是红包,而是一张入场券&…

2026/6/26 9:29:01阅读更多 →
10分钟AI语音克隆与实时变声:Retrieval-based-Voice-Conversion-WebUI完整指南

10分钟AI语音克隆与实时变声:Retrieval-based-Voice-Conversion-WebUI完整指南

10分钟AI语音克隆与实时变声&#xff1a;Retrieval-based-Voice-Conversion-WebUI完整指南 【免费下载链接】Retrieval-based-Voice-Conversion-WebUI Easily train a good VC model with voice data < 10 mins! 项目地址: https://gitcode.com/GitHub_Trending/re/Retrie…

2026/6/27 0:04:03阅读更多 →
Layerdivider:3分钟AI智能分层,彻底告别手动抠图时代

Layerdivider:3分钟AI智能分层,彻底告别手动抠图时代

Layerdivider&#xff1a;3分钟AI智能分层&#xff0c;彻底告别手动抠图时代 【免费下载链接】layerdivider A tool to divide a single illustration into a layered structure. 项目地址: https://gitcode.com/gh_mirrors/la/layerdivider 还在为复杂的图像分层工作烦…

2026/6/27 0:04:03阅读更多 →
Tomcat中X-Frame-Options配置实战:防御点击劫持的四种方法与最佳实践

Tomcat中X-Frame-Options配置实战:防御点击劫持的四种方法与最佳实践

1. 项目概述&#xff1a;为什么X-Frame-Options是Web安全的“防盗门”&#xff1f;最近在排查一个老项目的安全审计报告时&#xff0c;又被提到了“点击劫持”风险&#xff0c;矛头直指缺失的X-Frame-Options响应头。这已经不是第一次了&#xff0c;很多开发团队&#xff0c;尤…

2026/6/27 0:04:03阅读更多 →