Cesium.CustomShader颜色值显示错误
官方示例:
Cesium Sandcastle
测试过程:
1、修改示例,把customshader中的fragmentShaderText替换为如下代码
void fragmentMain(FragmentInput fsInput, inout czm_modelMaterial material)
{//注意:下述颜色的b值是0.1,不是1.0material.diffuse = vec3(0.0, 0.0, 0.1);}
上述shader代码很简单,就是给3dTiles赋一个颜色值
预期结果: rgb(0, 0, 25)
实际结果: rgb(0, 0, 90)

问题分析:
(以下分析是基于Cesium 1.111.0版本的源码)
发现问题出在LightingStageFS.glsl中Line69行
因为在shader中执行了
color = czm_linearToSrgb(color);
所以导致颜色失真!
#ifdef HAS_POINT_CLOUD_COLOR_STYLE
// The colors resulting from point cloud styles are adjusted differently.
color = czm_gammaCorrect(color);
#elif !defined(HDR)
// If HDR is not enabled, the frame buffer stores sRGB colors rather than
// linear colors so the linear value must be converted.
color = czm_linearToSrgb(color);//这里是导致颜色不准确的原因!!
#endif
解决方案:
方案1:
修改用户自己写的CustomShader
void fragmentMain(FragmentInput fsInput, inout czm_modelMaterial material)
{vec3 color=vec3(0.0, 0.0, 0.1);//使用czm_linearToSrgb的反向操作————czm_srgbToLinear//为了代码的通用性,在最后使用下述代码,最好不在中间代码处执行material.diffuse = czm_srgbToLinear(color);
}
注意:
在lightingModel设置为Cesium.LightingModel.PBR的时候
这个解决方案并不成立
方案2:
在上述shader中,我们发现,如果定义了HDR,就不会执行下述代码
color = czm_linearToSrgb(color);
是不是就解决了问题?
我试了下述代码
viewer.scene.highDynamicRange = false;
确实可以让shader中不走那段代码了,但是在后续的shader中,还是会改变颜色
这个后续再跟进
(这个方案失败)
相关文章:
Cesium.CustomShader颜色值显示错误
官方示例: Cesium Sandcastle 测试过程: 1、修改示例,把customshader中的fragmentShaderText替换为如下代码 void fragmentMain(FragmentInput fsInput, inout czm_modelMaterial material) {//注意:下述颜色的b值是0.1&#x…...
XSLVGL2.0 User Manual 页面管理器(v2.0)
XSLVGL2.0 开发手册 XSLVGL2.0 User Manual 页面管理器 1、概述2、特性3、APIs3.1、xs_page_init3.2、xs_page_wait_inited3.3、xs_page_exit3.4、xs_page_acquire3.5、xs_page_release3.6、xs_page_set_bootlogo3.7、xs_page_setup_clear_finish3.8、xs_page_setup_is_finish…...
论文学习-Attention Is All You Need
Attention Is All You Need 目前暂时不会用到,大概了解一下即可。 Recurrent model 序列化的计算方式,难以并行,随着序列的增长,以前的记忆会逐渐丢失。而Attention机制可以观察到句子中所有的信息,不受距离影响&…...
Springboot 使用 RabbitMq 延迟插件 实现订单到期未支付取消订单、设置提醒消息
示例业务场景: 场景1:客户下单后,15分钟内未支付取消订单! 场景2:客户下单支付成功后,5分钟内商家未处理订单,需要推送一条消息提醒商家。如依旧未处理,则需要每隔2分钟消息提醒一下…...
Linux安装Tesseract-OCR(操作系统CentOS)
Linux安装Tesseract-OCR 第一步,安装依赖第二步,下载安装包第三步,安装leptonica库第四步,安装tesseract第五步,添加语言包第六步,测试 第一步,安装依赖 sudo yum install libpng-devel rpm -q…...
pair和typedef
文章目录 一、pair用法1.2、pair的创建和初始化1.3、pair对象的操作1.4、(make_pair)生成新的pair对象1.5、通过tie获取pair元素值 2、typedef2.1、什么是typedef2.2、typedef用法2.2.1、对于数据类型使用例如:2.2.2、对于指针的使用例如2.2.3、对于结构体的使用 2.…...
rdf-file:分布式环境下的文件处理
一:简介 数据量大了以后,单机解析或者生成文件的效率就很低,需要通过集群处理: 机构过来的文件:我们先对文件进行分片,在利用集群集群处理分片文件。给机构文件:分库分表数据,每个…...
Maven下载与安装教程
一、下载 Maven 进入 Maven 官网:maven.apache.org/download.cgi 选择 .zip 文件下载,最新版本是 3.9.5 二、安装 Maven 将 .zip 文件解压到没有中文没有空格的路径下。例如下图,在创建一个repository的空文件夹在他的下面,用于…...
C++(20):通过starts_with/ends_with检查字符串
C20提供了starts_with用于检查字符串是否以某个字符串开始,ends_with用于检查是否以某个字符串结束: #include <iostream> #include <string> using namespace std;int main() {string str "hello and 88";cout<<str.star…...
YOLOv8+Nanodet强强联合改进标签分配:使用NanoDet动态标签分配策略,同时集成VFL全新损失,来打造新颖YOLOv8检测器
💡本篇内容:YOLOv8+Nanodet强强联合改进标签分配:使用NanoDet动态标签分配策略,同时集成VFL全新损失,来打造新颖YOLOv8检测器 💡🚀🚀🚀本博客 YOLO系列 + 改进NanoDet模型的动态标签分配策略源代码改进 💡一篇博客集成多种创新点改进:VFL损失函数 + Nanodet…...
base64字符串转成file
分割base64字符串,获取base64的格式和ASCII字符串;使用atob()方法将base64中的ASCII字符串解码成二进制数据"字符串";将二进制数据按位放入8 位无符号整型数组中适用new File()方法将ArrayBuffer转换成file对象 const base64 &qu…...
NextJS开发:Prisma开启SQL日志输出
在 Prisma 中打印执行的 SQL 可以通过在 PrismaClient 实例上设置 log 配置参数来实现。具体步骤如下: 在你的Prisma项目根目录中,找到 prisma/schema.prisma 文件在 datasource 块中,找到你正在使用的数据库配置,并添加 provide…...
barcode.js+elementUi——实现二维码的展示——基础积累
barcode.js——实现二维码的展示——基础积累 CSDN服务器一直报错条形码需求分析1.barcode.js的引入2.html页面上的写法——我这边是一个elementUI的弹窗条形码3.script中的部分 CSDN服务器一直报错 最近不知道怎么了,CSDN一直报服务器错误,不能只有我自…...
vue2 el-table 封装
vue2 el-table 封装 在 custom 文件夹下面创建 tableList.vue直接上代码(代码比较多,复制可直接用) <template><div class"mp-list"><el-tableref"multipleTable"class"mp-custom-table":dat…...
harmonyos应用开发者高级认证考试部分答案(2)
一、判断 只要使用端云一体化的云端资源就需要支付费用(错) 所有使用Component修饰的自定义组件都支持onPageShow,onBackPress和onPageHide生命周期函数。(错) HarmonyOS应用可以兼容OpenHarmony生态(对&am…...
【物联网与大数据应用】Hadoop数据处理
Hadoop是目前最成熟的大数据处理技术。Hadoop利用分而治之的思想为大数据提供了一整套解决方案,如分布式文件系统HDFS、分布式计算框架MapReduce、NoSQL数据库HBase、数据仓库工具Hive等。 Hadoop的两个核心解决了数据存储问题(HDFS分布式文件系统&#…...
Kotlin学习——kt里的集合List,Set,Map List集合的各种方法之Int篇
Kotlin 是一门现代但已成熟的编程语言,旨在让开发人员更幸福快乐。 它简洁、安全、可与 Java 及其他语言互操作,并提供了多种方式在多个平台间复用代码,以实现高效编程。 https://play.kotlinlang.org/byExample/01_introduction/02_Functio…...
docker buildx跨架构构建笔记(x86_64构建下构建aarch64镜像)
docker buildx跨架构构建(x86_64构建aarch64镜像) 文章目录 docker buildx跨架构构建(x86_64构建aarch64镜像)简介第一步 先交叉编译一个aarch64的HelloWorld程序。准备一个用于跨架构的Dockerfile文件使用docker buildx命令构建aarch64架构的镜像。查看镜像具体详细信息&#…...
Sass基础知识详细讲解【附带表图】
文章目录 前言使用 SassRack / Rails / Merb插件缓存选项语法选择编码 Sass CSS扩展Sass 注释输出 Sass 脚本Sass -规则和指令Sass 控制指令和表达式 Sass 混入指令Sass 功能指令命名约定Sass 输出样式:nested:expanded:compact:compressedSass 扩展缓存存储自定义导入 后言 前…...
《斯坦福数据挖掘教程·第三版》读书笔记(英文版)Chapter 3 Finding Similar Items
来源:《斯坦福数据挖掘教程第三版》对应的公开英文书和PPT It is therefore a pleasant surprise to learn of a family of techniques called locality-sensitive hashing, or LSH, that allows us to focus on pairs that are likely to be similar, without hav…...
树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...
AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...
CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...
Angular微前端架构:Module Federation + ngx-build-plus (Webpack)
以下是一个完整的 Angular 微前端示例,其中使用的是 Module Federation 和 npx-build-plus 实现了主应用(Shell)与子应用(Remote)的集成。 🛠️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...
技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...
