当前位置: 首页 > news >正文

Cesium 动态围墙(简易版)教程

动态围墙(简易版) ·dynamicWall Simple· ▶ 在线运行案例

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

你将学到什么

  • Scene / Camera / Renderer 标准渲染管线搭建
  • 案例完整源码结构与可复用初始化模板

效果说明

本案例演示动态围墙(简易版)效果:创建动态围墙效果。建议先打开文首在线案例查看动态画面,再对照下方源码逐步理解。

核心概念

  • Viewer聚合 Scene、Camera、Clock 与渲染循环,是 Cesium 应用入口。
  • 阅读下方完整源码时,建议从init/load/animate三条主线入手,再深入 shader 与工具函数。

实现步骤

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

    import * as Cesium from 'cesium'

    // 获取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 positions = [ 115.6434, 28.76762, 115.6432, 28.76762, 115.6432, 28.76756, 115.6434, 28.76756, 115.6434, 28.76762, ]

    // 设置相机视角,定位到围墙位置 viewer.camera.setView({ // 相机目标位置(经度、纬度、高度) destination: Cesium.Cartesian3.fromDegrees(115.6433, 28.7674, 30), orientation: { // 偏航角(朝向),正北为0度 heading: Cesium.Math.toRadians(0), // 俯仰角,-90度为垂直向下看 pitch: Cesium.Math.toRadians(-45), // 翻滚角,0为不翻滚 roll: 0 } }) // 调用函数创建动态围墙 addWalls(positions, 10) /**

    • 创建动态围墙效果
    • @param {Array >} positionLonLat - 围墙顶点的经纬度坐标数组
    • @param {number} height - 围墙的高度
    */ function addWalls(positionLonLat, height) {

    // 自定义着色器代码,实现动态流动效果 const mySource =czm_material czm_getMaterial(czm_materialInput materialInput) { czm_material material = czm_getDefaultMaterial(materialInput); vec2 st = materialInput.st; // 通过时间变量czm_frameNumber实现动态流动效果 vec4 colorImage = texture(image, vec2(fract(st.trep - speedczm_frameNumber0.005), st.trep)); material.alpha = colorImage.a * color.a; material.diffuse = colorImage.rgb; return material; }// 创建围墙几何体实例 const wallInstance = new Cesium.GeometryInstance({ geometry: new Cesium.WallGeometry({ // 将经纬度坐标数组转换为笛卡尔坐标 positions: Cesium.Cartesian3.fromDegreesArray(positionLonLat), // 围墙顶部高度数组,所有顶点使用相同的最大高度值 maximumHeights: new Array(positionLonLat.length / 2).fill(height), // 围墙底部高度数组,所有顶点使用相同的最小高度值 minimumHeights: new Array(positionLonLat.length / 2).fill(0), }), })

    // 创建围墙材质外观 const wallAppearance = new Cesium.MaterialAppearance({ material: new Cesium.Material({ fabric: { // 材质参数配置 uniforms: { // 围墙颜色设置为橙红色 color: new Cesium.Color.fromCssColorString("rgba(238, 85, 34, 1)"), // 流动效果使用的纹理图片路径 image: HOST + "files/images/colors.png", // 动画流动速度 speed: 3, // 纹理重复次数 rep: 4, }, // 使用自定义着色器代码 source: mySource, }, }), })

    // 创建围墙图元对象 const primitive = new Cesium.Primitive({ // 关联几何体实例 geometryInstances: wallInstance, // 设置外观材质 appearance: wallAppearance, // 保留几何体实例数据,以便后续可能的重用 releaseGeometryInstances: false, })

    // 将围墙添加到场景中 viewer.scene.primitives.add(primitive) }

    完整源码:GitHub

    小结

    • 本文提供动态围墙(简易版)完整 Cesium.js 源码与在线 Demo,建议先运行案例再改 uniform/参数做二次实验
    • 更多 Cesium.js 实战案例见 three-cesium-examples 合集 与 GitHub 开源仓库
http://www.jsqmd.com/news/1084064/

相关文章:

  • 前OpenAI安全研究VP万字长文扒Scaling Laws:你用的模型可能喂错数据量!
  • 61+技能、92+命令、67+智能体:ECC到底值不值得用?
  • 油层物理——3. 油气藏烃类的相态和汽液平衡
  • 小白 程序员 6 个低门槛 AI 副业,零基础也能月入 2w+
  • Windows 11安卓应用运行深度解析:从零到精通的三段式进阶之旅
  • 5分钟掌握终极浏览器资源嗅探:猫抓Cat-Catch完全免费指南
  • 到底需要多少算力?
  • Scrapy-Redis 分布式爬虫实战——从单机到集群
  • 亲测好用的视频号团购服务商分享
  • 云原生技术21-边缘计算+云原生:让计算力“下沉“到最后一公里,K3s/KubeEdge:在树莓派上跑Kubernetes是什么体验
  • AI医疗时代下的互联网医院APP开发方案解析
  • 360互联网安全大会聚焦智能体威胁,“中国版Mythos”能否破网络安全困局?
  • Apache Dubbo:企业级微服务框架的标杆
  • 基于mac80211_hwsim搭建WiFi模拟测试环境(下)-- 环境搭建与测试
  • LinkSwift:九大网盘直链解析工具,开启高速下载新体验
  • 5分钟掌握《经济研究》LaTeX模板:告别格式困扰的专业解决方案
  • Windows PDF处理终极方案:Poppler预编译包完整指南
  • 轻松打造企业专属应用,低代码开发来助力
  • Cesium 使用Shadertoy教程
  • ASIL-D到底有多难达到?从ISO 26262看车规MCU的研发门槛
  • Windows热键冲突检测工具:Hotkey Detective的完整使用指南
  • ESP32智慧养殖盒开发:4G联网与GPS追踪实战
  • AI语音输入全面进步,BAT入局输入法,能否带来新体验?
  • 记录分布式事务的实现方式和用法(有借助AI)
  • Web开发
  • Cesium 后期处理教程
  • 设计数据密集型应用第2版:2025-2026出版新书的《人月神话》引用(4)
  • 夏天总疲惫乏力、容易累、爱出汗的人,常喝这杯茶,养出元气满满好状态~
  • 【MATLAB】时变障碍物无人机动态规避仿真
  • Cesium 动态围墙教程