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

cesium可不可以改变影像底图颜色,如何给地球底图影像添加一层滤镜蒙版?

废话:你的球是不是很丑?是不是没有科技感?是不是没有好看的影像?

因果:

因:客户问,底图可不可以改变颜色,想让球更漂亮一些。
答:可以改变影像饱和度,透明度,灰度,色调等,也可以改变影像的瓦片着色。但是能不能叠加图层,叠加一个滤镜呢?

问:如何让球改成第二张图片的样子,像是加了滤镜。(着急的可以直接去看最后)
请添加图片描述
请添加图片描述

1,首先,hue调色调,没有找到相同的色调。

hue是接收弧度的,从3.14到-3.14我竟然找不到适合上面的颜色。如果有大佬懂的,可以指点一下。
详情参考cesium示例网址

2,然后,实现改变影像着色器。把影像改了,不是想要的效果。

cesium中,默认的底图颜色往往难以满足个性化需求,而【蓝色科技】风格常常备受青睐,本文从实操角度介绍实现方法。
请添加图片描述

简单来说,我们所用的方法叫做【反色滤镜】,总的分为2个步骤,反色,过滤。具体做法如下:

首先要获取目标影像图层,这里不能直接对div进行操作,因为会将地图上的所有元素都反色过滤了。

 // 获取地图影像图层let baseLayer = viewer.imageryLayers.get(0);
其次,定义2个变量,用来控制是否反色,以及过滤的具体值//设置2个变量,用来判断是否进行颜色的翻转和过滤baseLayer.invertColor = true;baseLayer.filterRGB = [0, 50, 100]; //[255,255,255] = > [0,50,100]

接着要获取着色器,方便后续直接操作着色器,写入修改后的glsl。

//   更改底图着色器的代码const baseFragmentShader =viewer.scene.globe._surfaceShaderSet.baseFragmentShaderSource.sources;

通过打印baseFragmentShader,可以看到里面有3个

接下来是最关键的步骤,反色+过滤。

// 循环修改着色器for (let i = 0; i < baseFragmentShader.length; i++) {// console.log(baseFragmentShader[i]);const strS = "color = czm_saturation(color, textureSaturation);\n#endif\n";let strT = "color = czm_saturation(color, textureSaturation);\n#endif\n";if (baseLayer.invertColor) {strT += `color.r = 1.0 - color.r;color.g = 1.0 - color.g;color.b = 1.0 - color.b;`;}if (baseLayer.filterRGB) {strT += `color.r = color.r*${baseLayer.filterRGB[0]}.0/255.0;color.g = color.g*${baseLayer.filterRGB[1]}.0/255.0;color.b = color.b*${baseLayer.filterRGB[2]}.0/255.0;`;}baseFragmentShader[i] = baseFragmentShader[i].replace(strS, strT);}

因为R、G、B都是从0-1,反色就是用1减去原来的值

color.r = 1.0 - color.r;
color.g = 1.0 - color.g;
color.b = 1.0 - color.b;

过滤则是要套用公式,对R、G、B进行操作

color.r = color.r*${baseLayer.filterRGB[0]}.0/255.0;
color.g = color.g*${baseLayer.filterRGB[1]}.0/255.0;
color.b = color.b*${baseLayer.filterRGB[2]}.0/255.0;

strS中的内容是glsl,原本就存在于baseFragmentShader中,而修改后的颜色值,直接用replace进行替换,将strT顶进去,发挥作用。

filterRGB的值可以根据需要进行调整,我试了2个值,都不错 [60, 145, 172] 和[0, 50, 100]

完整代码如下,可以封装成一个方法被调用。

export default function modifyMap(viewer) {// 获取地图影像图层let baseLayer = viewer.imageryLayers.get(0);//设置2个变量,用来判断是否进行颜色的翻转和过滤baseLayer.invertColor = true;baseLayer.filterRGB = [0, 50, 100]; //[255,255,255] = > [0,50,100]//   更改底图着色器的代码const baseFragmentShader =viewer.scene.globe._surfaceShaderSet.baseFragmentShaderSource.sources;// console.log(baseFragmentShader);// 循环修改着色器for (let i = 0; i < baseFragmentShader.length; i++) {// console.log(baseFragmentShader[i]);const strS = "color = czm_saturation(color, textureSaturation);\n#endif\n";let strT = "color = czm_saturation(color, textureSaturation);\n#endif\n";if (baseLayer.invertColor) {strT += `color.r = 1.0 - color.r;color.g = 1.0 - color.g;color.b = 1.0 - color.b;`;}if (baseLayer.filterRGB) {strT += `color.r = color.r*${baseLayer.filterRGB[0]}.0/255.0;color.g = color.g*${baseLayer.filterRGB[1]}.0/255.0;color.b = color.b*${baseLayer.filterRGB[2]}.0/255.0;`;}baseFragmentShader[i] = baseFragmentShader[i].replace(strS, strT);}
}

但是这种方式是直接把影像的瓦片颜色都改啦,山体都变色啦,不太像在正常天地图影像或其他影像上蒙上一层滤镜的感觉。

3,做一个全球kml面,给面一个颜色,加载到B端。

在图新地球4中画了半球全球的kml文件导出后,但是加载到B端引擎场景中效果样式错乱。
kml不能画整个球,绘制不到B端球上,但是我觉得应该可以画个六个八个,一起加载到球上,但是太多啦,我就没有再试。

4,把影像中lrc里瓦片图片换掉,成功实现

我找到了一个纯色深蓝色影像,发现加载这个影像是都是请求的一张图片,再看这个影像lrc文件,也是只引用这个图片的链接。那就可以把图片和文件放到静态服务器上,在线引用这个影像啦。代码,文件,图片放到下面啦,图片颜色可自己换,实现各种颜色滤镜。

mengban = new LSGlobe.LSLRCImageryProvider("http://show.wish3d.com/gyl/darkBaseMap.lrc");
mengban.name = "蒙版";
viewer.imageryLayers.addImageryProvider(mengban, 3);

darkBaseMap.lrc文件

<?xml version="1.0" encoding="GB18030"?><DataDefine>
<Version>0</Version>
<Name>img</Name>
<GeoGridType>WebMercatorWGS84</GeoGridType>
<SampleSize>256</SampleSize>
<FileExt></FileExt>
<DataVersion></DataVersion>
<DataType>urlformat</DataType>
<TileRowDir>NorthToSouth</TileRowDir>
<LocalPath></LocalPath>
<UrlParamOrder>X,Y,Z</UrlParamOrder>
<NetPath>http://localhost:8800/mengban.png</NetPath>
<Range>
<West>-180</West>
<East>180</East>
<South>-85</South>
<North>85</North>
<LevelBegin>1</LevelBegin>
<LevelEnd>20</LevelEnd>
</Range>
</DataDefine>

在这里插入图片描述

相关文章:

cesium可不可以改变影像底图颜色,如何给地球底图影像添加一层滤镜蒙版?

废话&#xff1a;你的球是不是很丑&#xff1f;是不是没有科技感&#xff1f;是不是没有好看的影像&#xff1f; 因果&#xff1a; 因&#xff1a;客户问&#xff0c;底图可不可以改变颜色&#xff0c;想让球更漂亮一些。 答&#xff1a;可以改变影像饱和度&#xff0c;透明度…...

MyBatis-MappedStatement什么时候生成?QueryWrapper如何做到动态生成了SQL?

通过XML配置的MappedStatement 这部分MappedStatement主要是由MybatisXMLMapperBuilder进行解析&#xff0c;核心逻辑如下&#xff1a; 通过注解配置的MappedStatement 核心逻辑就在这个里面了&#xff1a; 继承BaseMapper的MappedStatement 我们看看这个类&#xff0c;里…...

Netty系列-2 NioServerSocketChannel和NioSocketChannel介绍

背景 本文介绍Netty的通道组件NioServerSocketChannel和NioSocketChannel&#xff0c;从源码的角度介绍其实现原理。 1.NioServerSocketChannel Netty本质是对NIO的封装和增强&#xff0c;因此Netty框架中必然包含了对于ServerSocketChannel的构建、配置以及向选择器注册&am…...

智能客服的四大优势,提升企业服务效率

在这个信息化快速发展的时代&#xff0c;客户服务的重要性越来越凸显。传统的客服方式已经无法满足企业日益增长的服务需求&#xff0c;于是智能客服服务应运而生。智能客服服务不仅改变了企业与客户的互动方式&#xff0c;还提高了服务效率和客户满意度。本文将深入探讨智能客…...

AutoGPT开源项目解读

AutoGPT开源项目解读 (qq.com) AutoGPT旨在创建一个自动化的自我改进系统&#xff0c;能够自主执行和学习各种任务 项目基本信息 首先阅读项目的README.md&#xff0c;下述代理和智能体两个名词可互换 项目简介&#xff1a;一个创建和运行智能体的工具&#xff0c;这些智能体…...

Linux离线安装fontconfig

Linux离线下载yum包&#xff0c;安装字体库 一、下载安装包 以CentOS Linux release 7.9.2009下载fontconfig的rpm包的为例 http://mirror.centos.org/centos/7/按提示跳转历史库 找到对应版本的centos https://vault.centos.org/7.9.2009/os/x86_64/Packages/在Packages目…...

海山数据库(He3DB)+AI:(一)神经网络基础

文章目录 1 引言2 基本结构2.1 神经元2.2 模型结构 3 训练过程3.1 损失函数3.2 反向传播3.3 基于梯度的优化算法 4 总结 1 引言 神经网络可以被视为一个万能的拟合器&#xff0c;通过深层的隐藏层实现输入数据到输出结果的映射。神经网络的思想源于对大脑的模拟&#xff0c;在…...

CSS中选择器有哪些?(史上最全选择器)

CSS选择器是用来选择和应用样式到HTML元素上的工具。以下是所有主要的CSS选择器的详细分类和描述&#xff1a; 1. 基本选择器 通配符选择器 (*)&#xff1a;选择所有元素。例如&#xff0c;* { color: red; } 会将所有元素的文字颜色设置为红色。元素选择器&#xff1a;选择指…...

本地部署 AI 智能体,Dify 搭建保姆级教程(下):知识库 RAG + API 调用,我捏了一个红楼解读大师

话接上篇&#xff1a; 本地部署 AI 智能体&#xff0c;Dify 搭建保姆级教程&#xff08;上&#xff09;&#xff1a;工作流 Agent&#xff0c;把 AI 接入个人微信 相信大家已经在本地搭建好 Dify 了。 今日分享&#xff0c;继续介绍 Dify 的另外两项重要功能&#xff1a; 知…...

HarmonyOS应用开发者高级认证,Next版本发布后最新题库 - 答案纯享版

这篇文章是高级题库答案纯享版&#xff0c;只有需要选择的选项。如果需要查看所有选项&#xff0c;可以点击下方链接跳转。以考代学&#xff0c;还是推荐点击下方链接&#xff0c;查看完整的题库&#xff0c;边看边学习鸿蒙应用开发。此题库已更新完毕&#xff0c;笔者将不继续…...

基于PHP的文件包含介绍

引言&#xff1a;在实际开发过程中&#xff0c;经常会遇到部分模块功能需要重复使用的情况&#xff0c;比如数据库的增删改查&#xff0c;文件包含通过将需要重复使用的功能模块代码引入其他文件的内容&#xff0c;实现重用代码、分离配置等。然而&#xff0c;如果文件包含操作…...

K7系列FPGA多重启动(Multiboot)

Xilinx 家的 FPGA 支持多重启动功能&#xff08;Multiboot&#xff09;&#xff0c;即可以从多个 bin 文件中进行选择性加载&#xff0c;从而实现对系统的动态更新&#xff0c;或系统功能的动态调整。 这一过程可以通过嵌入在 bit 文件里的 IPROG 命令实现上电后的自动加载。而…...

关于武汉芯景科技有限公司的RS232通信接口芯片XJ3243EEUI开发指南(兼容MAX3243EEUI)

一、芯片引脚介绍 1.芯片引脚 2.引脚描述 二、典型应用电路 三、功能描述 1.Transmitter 通过T1&#xff0c;T2可以将TTL电平转换为RS232电平 2.Receiver 通过R1&#xff0c;R2可以将RS232电平转换为TTL电平 3.工作模式控制 4.INVALID引脚...

TreeSize Free:你的免费磁盘空间管理专家

TreeSize Free是一款专为Windows用户设计的磁盘空间分析工具。它能够帮助用户快速识别并管理那些占用大量空间的文件夹和文件。 功能亮点 快速扫描&#xff1a;TreeSize Free能够迅速扫描整个磁盘卷&#xff0c;展示所有文件夹及其子文件夹的大小&#xff0c;甚至可以细化到单…...

python办公自动化:初识`python-docx`

1.1 什么是python-docx python-docx是一个用于在Python中创建和操作Word文档的库。它提供了一组简洁的API&#xff0c;让开发者可以轻松地生成、修改、和读取Microsoft Word (.docx)文件&#xff0c;而不需要安装Microsoft Office。这使得python-docx成为办公自动化、报告生成…...

LeetCode 算法:划分字母区间 c++

原题链接&#x1f517;&#xff1a;划分字母区间难度&#xff1a;中等⭐️⭐️ 题目 给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段&#xff0c;同一字母最多出现在一个片段中。 注意&#xff0c;划分结果需要满足&#xff1a;将所有划分结果按顺序连接&#…...

PMP备考指南:策略、时间安排与心得分享

准备和时间安排&#xff0c;我是工作的时间把它顺便考了&#xff0c;大约花了一个月左右时间备考&#xff0c;前面的时间都在筹办婚礼&#xff0c;根本没时间&#xff0c;最后一个月都差点想放弃了&#xff0c;但想想还是冲一把就没有选择延考。 干货见下&#xff1a; ▌&…...

CentOS上通过frp实现HTTPS访问内网

要在CentOS上通过frp实现HTTPS访问内网&#xff0c;你需要按照以下步骤操作&#xff1a; 在外网服务器上安装frps&#xff08;frp服务端&#xff09;。 在外网服务器上配置frps&#xff0c;编辑配置文件frps.ini。 在frps服务器上启动frps服务。 在内网服务器上安装frpc&…...

短视频SDK解决方案,高效集成,助力商业变现

美摄科技&#xff0c;作为业界领先的多媒体技术服务商&#xff0c;其全面升级的短视频SDK解决方案&#xff0c;旨在为开发者与内容创作者提供一站式、高效能的创作工具&#xff0c;让每一个灵感都能瞬间转化为触动人心的视频作品。 【一站式解决方案&#xff0c;重塑短视频创作…...

C++系列-继承方式

继承方式 继承的语法继承方式&#xff1a;继承方式的特点继承方式的举例 继承可以减少重复的代码。继承允许我们依据另一个类来定义一个类&#xff0c;这使得创建和维护一个应用程序变得更容易。基类父类&#xff0c;派生类子类&#xff0c;派生类是在继承了基类的部分成员基础…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;KubeSphere 容器平台高可用&#xff1a;环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…...

java_网络服务相关_gateway_nacos_feign区别联系

1. spring-cloud-starter-gateway 作用&#xff1a;作为微服务架构的网关&#xff0c;统一入口&#xff0c;处理所有外部请求。 核心能力&#xff1a; 路由转发&#xff08;基于路径、服务名等&#xff09;过滤器&#xff08;鉴权、限流、日志、Header 处理&#xff09;支持负…...

css实现圆环展示百分比,根据值动态展示所占比例

代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

DockerHub与私有镜像仓库在容器化中的应用与管理

哈喽&#xff0c;大家好&#xff0c;我是左手python&#xff01; Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库&#xff0c;用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序

一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

「全栈技术解析」推客小程序系统开发:从架构设计到裂变增长的完整解决方案

在移动互联网营销竞争白热化的当下&#xff0c;推客小程序系统凭借其裂变传播、精准营销等特性&#xff0c;成为企业抢占市场的利器。本文将深度解析推客小程序系统开发的核心技术与实现路径&#xff0c;助力开发者打造具有市场竞争力的营销工具。​ 一、系统核心功能架构&…...

实战三:开发网页端界面完成黑白视频转为彩色视频

​一、需求描述 设计一个简单的视频上色应用&#xff0c;用户可以通过网页界面上传黑白视频&#xff0c;系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观&#xff0c;不需要了解技术细节。 效果图 ​二、实现思路 总体思路&#xff1a; 用户通过Gradio界面上…...