Cesium.CustomShader颜色值显示错误

官方示例:

Cesium Sandcastle

测试过程:

1、修改示例,把customshader中的fragmentShaderText替换为如下代码

void fragmentMain(FragmentInput fsInput, inout czm_modelMaterial material)
{
    //注意:下述颜色的b值是0.1,不是1.0
    material.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中,还是会改变颜色

这个后续再跟进

(这个方案失败)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/204702.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

IPv6+2.0网络切片技术在电子政务网的应用实践详解

IPv6是面向5G、云网/算网融合的智能IP技术,具有包含可编程路径、快速业务发放、自动化运维、质量可视化、SLA保障和应用感知等特点。IPv6将万物互联提升到了万物智联,赋能百行百业高质量数字化转型。 图示:“IPv6”技术创新体系发展的三个阶段…

机器学习模型验证——以数据为中心的方法

构建机器学习模型时,人们往往将激情和精力集中于收集数据和训练模型,对测试模型和验证结果往往缺少应有的关注。正确的验证技术有助于估计无偏见的广义模型的性能,并更好地理解模型训练的效果。您需要确保机器学习模型经过准确的训练&#xf…

骨传导与入耳式耳机哪种音质好?骨传导与入耳式耳机有什么区别?

由于骨传导耳机和入耳式耳机的传声原理不同,入耳式耳机的音质要更好一些! 想要了解骨传导耳机和入耳式耳机哪种音质好,首先就要了解骨传导耳机和入耳式耳机的传声原理有什么区别? 一、骨传导耳机和入耳式耳机有什么区别 1、传声…

智慧垃圾分拣站:科技改变城市环境,创造更美好的未来

随着城市化进程的不断加快,垃圾处理问题日益凸显。为了更好地解决垃圾分类问题,越来越多的城市开始推广智慧垃圾分拣站,利用创新科技实现高效垃圾分类处理。 山海鲸使用三维建模技术,建立了一个智慧垃圾分拣站数字孪生模型&#x…

PHP在线日语学习平台

有需要请加文章底部Q哦 可远程调试 PHP在线日语学习平台 一 介绍 此日语学习平台基于原生PHP开发,数据库mysql。系统角色分为用户和管理员。(附带参考设计文档) 技术栈:phpmysqlphpstudyvscode 二 功能 学生 1 注册/登录/注销 2 个人中心 3 查看课程…

自己的邮箱名称出现在别人的此电脑的网络位置中

在公司别的同事告诉我,我的邮箱名字出现在他们的【此电脑】-【网络位置中】 如图: 当时吓我一跳,因为我总喜欢搞一些渗透的东西,我以为把自己暴漏了,然后疯狂的在网上找原因。 于是就搜到一位安暖的博主: …

发生这种情况 经常导致投资者的痛苦

在这个市场中,什么事会让人痛苦呢?有的投资者马上回答,因为亏损。说实话,如果经过刻意的练习,我们在一定程度上能克服亏损给人带来的痛感。但是有另一种情况也容易为投资者带来痛苦,下面我们就来讨论一下。…

单片机学习12——电容

电容的作用: 1)降压作用: 容抗: Xc 1/2fc 串联分压原理。2100Ω的容量,50Hz的频率,可以得到1.5uF。断电之后,需要串联一个1MΩ的电阻放电。 那是不是可以使用2100欧姆的电阻来代替电容呢&am…

Java高级技术(反射的作用与应用场景)

一,放射 二,案例 (1),题目 (2),反射类 (3),测试类

民安智库(第三方公众满意度调查):专业助力咖啡店客户满意度调查

近期,一家知名的咖啡店品牌面临着市场竞争加剧和服务质量提升的挑战。为了更好地了解客户需求和提升客户满意度,该咖啡店决定委托民安智库(第三方满意度测评)开展一次全面的客户满意度调查。 本次调查旨在了解客户对咖啡店服务的…

【10张图带你搞清楚生成树协议】

STP协议分类 BPDU,网桥协议数据单元 STP路径开销,以链路带宽为准,两个标准,现在主要以NEW为准 在网络刚开始运行的阶段,所有交换机都会从所有端口发送BPDU,大家都认为自己是root,随着B…

一键分发平台-账号设置

首页-账号管理 ●登录后点击箭头-账号设置 控制台-账号管理 ●进入控制台-个人中心-账号管理 ●账号管理-个人资料介绍 ●账号管理-修改密码 ●账号管理-通知设置 ●账号管理-上传设置 ●账号管理-账号设置 ●账号管理-登录日志

Cascader 级联选择器动态加载数据的回显

如果后端没有只返回第三级的id,而是同时把第三级的名字一起返回了,那么就可以通过下面的方法来实现 1.在级联选择器里面加上这句代码 placeholder"请选择" 2.注册一个字符串 pleasett:"" 3.赋值 如过后端返回的有第三级的选项名 直接进行赋…

从原理和公式出发:python实现One_Way_ANOVA

文章目录 目的:python实现one way ANOVA 单因素方差分析1. 代码流程2. python代码实现0 主要的函数1 加载数据2 查看数据统计结果3 数据处理及可视化4 方差分析4.1 模型拟合4.2 单因素方差分析 5 Post Hoc t-test组间比较分析6 根据定义自行分解计算对比调用函数的结…

特征选择的方法:包裹法之递归特征消除

1.递归特征消除法的基本原理 递归特征消除法是一种贪婪的优化算法,致力于通过反复创建模型的方式找到性能最佳的特征子集。 首先将筛选的K个特征作为初始特征子集,开展机器学习计算得到每个特征的重要性,利用交叉验证方法得到初始特征子集的…

JOSEF约瑟 大功率抗干扰继电器\NR0521\220VDC 导轨安装

NR系列大功率继电器 系列型号: NR0521B大功率继电器 NR0521A大功率继电器 NR0521型大功率继电器 用途 大功率继电器NR0521220VDC 导轨安装在电力工程实际应用中,为防止母线电压经过PT二次侧反馈至高压侧,需要在PT二次侧串接PT刀闸重动接…

ROM和RAM概念

一、存储器特性 1)易失性:掉电数据会丢失,通常指RAM; RAM分为SRAM、DRAM SRAM:静态RAM,只要上电数据就不会丢失; DRAM:动态RAM,需要每隔一段事件刷新数据,否…

Windows安装Kafka3.6,单机

Kafka版本:kafka_2.13-3.6.0 Windows10系统 安装与配置 下载 kafka_2.13-3.6.0.tgz 下载并解压Kafka 3.6.0的压缩包到你选择的目录。 Kafka3.6.0下载链接https://kafka.apache.org/downloads 说明:Kafka3.6内置了Zookeeper,使用内置的Zo…

数字孪生3D场景开发工具:弥补不足,开拓全新可能

随着数字化时代的来临,越来越多的企业和行业开始探索数字孪生技术的应用。数字孪生是指通过数字技术将现实世界中的物体、场景等复制到虚拟世界中,以实现实时监测、预测和优化。然而,在数字孪生的发展过程中,一些不足也逐渐浮现。…

11.28 C++作业

提示并输入一个字符串&#xff0c;统计该字符中大写、小写字母个数、数字个数、空格个数以及其他字符个数 要求使用C风格字符串完成 #include <iostream>using namespace std;int main() {string str;cout << "请输入一个字符串&#xff1a;" <<…