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

Cesium 渐变色墙体教程

渐变色墙体 ·Gradient Wall· ▶ 在线运行案例

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

你将学到什么

  • Canvas 动态纹理贴图
  • Cesium Entity 高层实体 API

效果说明

本案例演示渐变色墙体效果:创建垂直渐变色带图像,用 Canvas 2D 绘制内容并实时映射为 Three.js 纹理;核心用到 Canvas、Cesium。建议先打开文首在线案例查看动态画面,再对照下方源码逐步理解。

核心概念

  • Viewer聚合 Scene、Camera、Clock 与渲染循环,是 Cesium 应用入口。
  • CanvasTexture每帧或按需把 2D Canvas 内容上传 GPU,适合动态文字、图表、视频帧贴图。
  • Entity面向点线面/模型/标签的高层 API;与 Primitive 相比更适合交互与属性驱动。

实现步骤

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

    import * as Cesium from 'cesium'

    // 获取Cesium容器元素,用于初始化Viewer 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, 10, // 第一个点:东经115.6434度,北纬28.76762度,高度10米 115.6432, 28.76762, 10, // 第二个点:东经115.6432度,北纬28.76762度,高度10米 115.6432, 28.76756, 10, // 第三个点:东经115.6432度,北纬28.76756度,高度10米 115.6434, 28.76756, 10, // 第四个点:东经115.6434度,北纬28.76756度,高度10米 115.6434, 28.76762, 10, // 第五个点(闭合点):回到第一个点位置 ]

    // 定义墙体的基本颜色 const color = Cesium.Color.YELLOW;

    // 添加墙体实体到场景中 let wall = viewer.entities.add({ wall: { // 设置墙体的位置,使用Cesium.Cartesian3.fromDegreesArrayHeights将经纬度高度数组转换为笛卡尔坐标 positions: Cesium.Cartesian3.fromDegreesArrayHeights(positions), // 设置墙体材质,使用图像材质属性创建渐变效果 material: new Cesium.ImageMaterialProperty({ transparent: true, // 启用透明度 // 使用自定义函数生成渐变色带图像 image: getColorRamp({ 0.0: color.withAlpha(1.0).toCssColorString(), // 底部不透明黄色 0.2: color.withAlpha(0.8).toCssColorString(), // 20%高度处80%透明度 0.4: color.withAlpha(0.6).toCssColorString(), // 40%高度处60%透明度 0.6: color.withAlpha(0.4).toCssColorString(), // 60%高度处40%透明度 0.8: color.withAlpha(0.2).toCssColorString(), // 80%高度处20%透明度 1.0: color.withAlpha(0.0).toCssColorString(), // 顶部完全透明 }) }), } });

    // 缩放视角以完整显示创建的墙体 viewer.zoomTo(wall);

    /**

    • 创建垂直渐变色带图像
    • @param {Object} val - 颜色值对象,键为位置比例(0.0-1.0),值为CSS颜色字符串
    • @returns {HTMLCanvasElement} 包含垂直渐变的canvas元素
    */ function getColorRamp(val) { // 创建canvas元素用于绘制渐变色带 const ramp = document.createElement('canvas'); ramp.width = 1; // 宽度为 1 像素(只需要垂直方向的渐变) ramp.height = 100; // 高度为 100 像素 // 获取2D绘图上下文 const ctx = ramp.getContext("2d"); // 创建垂直线性渐变,从顶部(0,0)到底部(0,100) const grd = ctx.createLinearGradient(0, 0, 0, 100); // 添加颜色断点到渐变中 for (let key in val) { // 反转颜色位置,因为Canvas坐标系与我们期望的渐变方向相反 grd.addColorStop(1 - Number(key), val[key]); } // 应用渐变填充整个canvas ctx.fillStyle = grd; ctx.fillRect(0, 0, 1, 100); // 返回生成的渐变图像 return ramp; }

    完整源码:GitHub

    小结

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

相关文章:

  • 微创介入是“矛“,中医扶正是“盾“——杭州这家医院把两者融成了一体
  • 号码认证哪家好?关键指标与权威平台推荐
  • INT8量化实战:从FP32模型到边缘端高效推理的完整工程链
  • iOS自动化测试核心:WebDriverAgent原理、配置与Appium集成实战
  • 两种并发模式
  • 当“散装物料”遇上“智慧装车”:工厂里的装车,也可以很智能
  • 国内冷镦钢厂主要分布在哪些产区?
  • QQ音乐加密文件终极解密指南:3步快速解锁qmcdump工具完整教程
  • 如何免费激活Unity全版本:UniHacker跨平台破解工具完整指南
  • roop-unleashed终极指南:5分钟上手专业级AI换脸工具,轻松实现深度伪造
  • 网络安全领域探索指南
  • 出钱做游戏,版权到底归谁?90%的人都搞错了
  • XUnity自动翻译器完全指南:解锁Unity游戏多语言体验的终极方案
  • LSTM序列分类实战:时间步建模、门控调优与工程落地
  • Proxmox 备份恢复:VM 和 LXC 恢复指南、PBS 恢复局限及 Veeam 补充方案
  • LangFlow深度解析:构建企业级AI工作流的可视化开发平台
  • PMI 监控链路里的 pmistore,一条容易被忽略却非常关键的 HTTP Destination
  • 【计算机毕业设计案例】基于 Java 的智慧物业便民服务系统设计与实现(程序+文档+讲解+定制)
  • 使用 C# 提取 Word 文档中的表格数据
  • 【STM32HAL库开发】学习笔记(1)——GPIO
  • 解密Wallpaper Engine创意工坊下载器:Flutter技术栈下的高效壁纸管理方案
  • HACS高级故障诊断与系统优化深度解析:架构级解决方案实战
  • 计算机毕业设计之基于文本挖掘的综艺评论情感分析--LW
  • 操作系统调优
  • 资料丨2026版《医疗器械生产质量管理规范》自查报告
  • MPC8360E PCI总线深度解析:信号时序、事务终止与调试实践
  • Eclipse Cyclone DDS实战:从构建、配置到性能调优的机器人核心中间件指南
  • CogVideo与CogVideoX模型结构
  • 越权漏洞实战挖掘:从原理到案例,掌握水平与垂直越权防御
  • 125、 PCIE交换机仲裁与带宽分配:从一次深夜调试说起