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

在Cesium中创建渐变色墙体效果

效果如下:

实现思路

为了实现墙体的渐变色效果,我们需要完成以下步骤:

  1. 定义墙体的位置和高度:通过经纬度坐标和高度值指定墙体的边界。

  2. 创建渐变色纹理:使用HTML5的canvas元素生成垂直渐变的纹理。

  3. 将纹理应用于墙体材质:利用Cesium的ImageMaterialProperty将生成的纹理设置为墙体的材质。

代码实现

定义墙体位置

墙体的位置由一系列经纬度坐标和高度值组成。我们使用Cesium的Cartesian3.fromDegreesArrayHeights方法将这些数据转换为三维空间中的点。

let positions = [118.47902832652349, 24.44585889405662, 10,118.47930870673423, 24.445683353547352, 10,118.47910614876766, 24.445472698536705, 10,118.47887054285178, 24.445695846684394, 10,118.47902832652349, 24.44585889405662, 10,
];

创建渐变色纹理

我们使用HTML5的canvas元素来生成渐变色纹理。通过createLinearGradient方法创建一个垂直渐变,并在不同的位置添加颜色停止点。为了实现从底部到顶部的透明度渐变,我们将颜色的透明度从1逐渐降低到0。

function getColorRamp(val) {const ramp = document.createElement('canvas');ramp.width = 1; // 宽度为 1 像素ramp.height = 100; // 高度为 100 像素const ctx = ramp.getContext("2d");const grd = ctx.createLinearGradient(0, 0, 0, 100);for (let key in val) {grd.addColorStop(1 - Number(key), val[key]); // 反转颜色位置}ctx.fillStyle = grd;ctx.fillRect(0, 0, 1, 100);return ramp;
}

应用渐变色纹理到墙体

使用Cesium的ImageMaterialProperty将生成的渐变色纹理设置为墙体的材质。我们定义了一个白色墙体,并通过withAlpha方法调整颜色的透明度,生成渐变色的CSS颜色字符串。

const color = Cesium.Color.WHITE;
let wall = viewer.entities.add({wall: {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(),0.4: color.withAlpha(0.6).toCssColorString(),0.6: color.withAlpha(0.4).toCssColorString(),0.8: color.withAlpha(0.2).toCssColorString(),1.0: color.withAlpha(0.0).toCssColorString(),})}),}
});
viewer.zoomTo(wall);

http://www.mrgr.cn/news/96143.html

相关文章:

  • [二值图像处理] 骨架线提取、骨架端点、交叉点提取
  • Ollama未授权访问
  • 力扣:回溯算法
  • AS400==WINDOWS开发COBOL/安装DB2/连接DB2
  • 学有所记——初探向量数据库Weaviate
  • 深度学习入门1 基于Python的理论与实现
  • kubeadm部署k8s-1.32版本集群(1个master,1个worker)
  • 电机控制常见面试问题(二十)
  • 每日一题-力扣-2829. k-avoiding 数组的最小总和 0326
  • gz sim机器人SDF模型 [持续更新]
  • [unity 点击事件] 区域响应点击事件,排除子节点区域,Raycast Target 应用
  • Android实践开发制作小猴子摘桃小游戏
  • 系统架构设计知识体系总结
  • 在 Linux(Ubuntu / CentOS 7)上快速搭建我的世界 MineCraft 服务器,并实现远程联机,详细教程
  • 给Web开发者的HarmonyOS指南01-文本样式
  • 数学-算法
  • Unity-RectTransform设置UI width
  • 生成模型速通(Diffusion,VAE,GAN)
  • 【更新中】【React】基础版React + Redux实现教程,自定义redux库和react-redux库
  • Mac 常用命令