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中,还是会改变颜色

这个后续再跟进

(这个方案失败)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

智能配电箱监控系统

智能配电箱监控系统是一种用于实时监控配电箱运行状态和电能质量的系统。它通过集成应用物联网技术,实现对配电箱的数据采集、整合和处理,从而让工作人员能够远程了解和掌握配电箱的情况。通过电力设备的数字化,依托电易云-智慧电力物联网&am…

论文 排版

论文格式调整 页眉-不同章节设置不同页眉 页面布局-分隔符-下一页 页码-正文重新从1记页数 待写???

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

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

如何去选择合适的线缆测试仪?CAT8网线认证测试

如何去选择合适的线缆测试仪? 如果你是第三方检测单位,系统集成商,或者线缆生产厂家,我个人建议选择福禄克DSX系列无疑是比较保险的做法,因为考虑到福禄克在国内耕耘多年所积累起来的品牌知名度和口碑,选择一款大家都…

PHP程序员必备技能:OSS云存储实现教程!

近些年来,云存储的应用越来越广泛,阿里云的OSS云存储服务也在国内市场中占据了一席之地。在此基础上,本文将分享如何使用PHP实现OSS云存储。 首先,我们需要在阿里云官网上注册一个账号并创建一个OSS存储空间。创建步骤在官方文档…

C语言-走进指针世界

引入 在C语言的学习过程中,指针是躲不掉的一大困难,开始的时候,可能你会觉得初始化整形指针和解引用不过如此,但是当类型逐渐复杂起来以后,没有对指针和类型的深入理解,想要看懂和很好的运用指针就比较困难…

【华为OD题库-048】拔河比赛-java

题目 公司最近准备进行拔河比赛,需要在全部员工中进行挑选。选拔的规则如下: 1.按照身高优先、体重次优先的方式准备比赛阵容 2.规定参赛的队伍派出10名选手 请实现一个选拔队员的小程序。 输入为一个数组,记录了部门人员的身高、体重信息,如…

Linux下unzip解压乱码问题的解决

1、通过unzip行命令解压,指定字符集 unzip -O CP936 xxx.zip (用GBK, GB18030也可以)CP936其实就是GBK,IBM在发明Code Page的时候将GBK放在第936页,所以叫CP936。GBK全称《汉字内码扩展规范》(GBK即“国标”、“扩展”汉语拼音的…

振南技术干货集:各大平台串口调试软件大赏(4)

注解目录 (串口的重要性不言而喻。为什么很多平台把串口称为 tty,比如 Linux、MacOS 等等,振南告诉你。) 1、各平台上的串口调试软件 1.1Windows 1.1.1 STCISP (感谢 STC 姚老板设计出 STCISP 这个软件。&#xf…

相机标定张正友、opencv和halcon对比(1)

本文将从基本标定开始,结合实际工作经验,分析张正友、opencv和halcon三者相机标定的深层原理与不同之处,内容比较多,如果出现错误请指正。 相机光学模型 我们使用的镜头都是由多组镜片组成,它实际上是一种厚透镜模型…

羊大师提问,为什么吃得越咸越容易出现健康问题?

羊大师提问,为什么吃得越咸越容易出现健康问题? 在现代社会中,有一种追求咸味食物的趋势,许多人都钟爱于吃咸味食物。吃咸味食物往往容易导致健康问题,引发各种疾病。那么为什么吃的越咸越容易生病呢? 今…

C++二分查找算法:132 模式枚举3

说明 本篇是视频课程的讲义,可以看直接查看视频。也可以下载源码,包括空源码。 本文涉及的基础知识点 二分查找算法合集 本题不同解法 包括题目及代码C二分查找算法:132 模式解法一枚举3C二分查找算法:132 模式解法二枚举2代码…

黑洞:宇宙中最神秘的天体

黑洞:宇宙中最神秘的天体 一、引言 在浩瀚的宇宙中,有一种神秘的天体,它强大到连光也无法逃逸,这就是黑洞。自从黑洞理论被提出以来,它一直是物理学家和天文学家研究的焦点。尽管我们还无法直接看到黑洞,…

使用 Redis Zset 有序集合实现排行榜功能(SpringBoot环境)

目录 一、前言二、Redis Zset 的基本操作三、通过Redis 命令模拟排行榜功能3.1、排行榜生成3.2、排行榜查询 四、SpringBoot 使用 Redis Zset 有序集合实现排行榜功能 一、前言 排行榜功能是非常常见的需求,例如商品售卖排行榜单、游戏中的积分排行榜、配送员完单排…

VirtualBox上安装CentOS7

基础环境:宿主机是64位Windows10操作系统,通过无线网访问网络。 macOS可以以类似方式进行安装,不同之处见最后补充。 Step1 安装VirtualBox VirtualBox是一款免费、开源、高性能的虚拟机软件,可以跨平台运行,支持Wi…

【神印王座】永恒之塔秘密透露,林鑫告白李馨,皓晨采儿甜蜜接吻

Hello,小伙伴们,我是拾荒君。 《神印王座》第83集如期而至,带来了令人期待已久的更新。与众多热情的观众一样,拾荒君一得到更新消息,便急不可耐地观赏起来。这一集中,龙皓晨随着月魔宫的月夜商队成功抵达联盟&#xf…

判断Xposed框架

判断Xposed框架 1: 根据包名判断 列举一些常用的应用判断是否安装,来判断. private static List<String> asList Arrays.asList("de.robv.android.xposed", "com.topjohnwu.magisk", "io.va.exposed", "org.meowcat.edxposed.man…

C++: string的模拟实现

C: string的模拟实现 一.前置说明1.模拟实现string容器的目的2.我们要实现的大致框架 二.默认成员函数1.构造函数2.拷贝构造函数1.传统写法2.现代写法 3.析构函数4.赋值运算符重载1.传统写法2.现代写法 三.遍历和访问1.operator[]运算符重载2.iterator迭代器 四.容量相关函数1.…

Linux下将Java项目(Jar包)打包成服务

目录 ​​​​​​​​​​​​​​ 创建一个新的Systemd服务单元文件。打开终端并使用文本编辑器创建一个新的服务单元文件&#xff0c;例如myapp.service。 在该文件中输入以下内容&#xff0c;替换其中的占位符为您自己的配置&#xff1a; 保存并关闭文件。 使用以下命…

ssm+vue的公司安全生产考试系统(有报告)。Javaee项目,ssm vue前后端分离项目。

演示视频&#xff1a; ssmvue的公司安全生产考试系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;ssm vue前后端分离项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结…