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

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.lryc.cn/news/248984.html

相关文章:

  • XSLVGL2.0 User Manual 页面管理器(v2.0)
  • 论文学习-Attention Is All You Need
  • Springboot 使用 RabbitMq 延迟插件 实现订单到期未支付取消订单、设置提醒消息
  • Linux安装Tesseract-OCR(操作系统CentOS)
  • pair和typedef
  • rdf-file:分布式环境下的文件处理
  • Maven下载与安装教程
  • C++(20):通过starts_with/ends_with检查字符串
  • YOLOv8+Nanodet强强联合改进标签分配:使用NanoDet动态标签分配策略,同时集成VFL全新损失,来打造新颖YOLOv8检测器
  • base64字符串转成file
  • NextJS开发:Prisma开启SQL日志输出
  • barcode.js+elementUi——实现二维码的展示——基础积累
  • vue2 el-table 封装
  • harmonyos应用开发者高级认证考试部分答案(2)
  • 【物联网与大数据应用】Hadoop数据处理
  • Kotlin学习——kt里的集合List,Set,Map List集合的各种方法之Int篇
  • docker buildx跨架构构建笔记(x86_64构建下构建aarch64镜像)
  • Sass基础知识详细讲解【附带表图】
  • 《斯坦福数据挖掘教程·第三版》读书笔记(英文版)Chapter 3 Finding Similar Items
  • 天眼销:超有用的企业获客工具
  • dbeaver连接amabri-hbase
  • Mac IDEA解决Maven项目命令行报错:command not found: mvn
  • 线性回归 梯度下降
  • [Linux]进程等待
  • Project DESFT 白皮书中文版——应用于普惠金融的可信数字凭证解决方案
  • 907. 子数组的最小值之和 --力扣 --JAVA
  • 3D模型渲染导致电脑太卡怎么办?
  • 构建个人代理池:使用GitHub项目proxy_pool的搭建配置及代码接口详解
  • Pytorch进阶教学——训练一个图像分类模型(GPU)
  • Docker Swarm总结+CI/CD Devops、gitlab、sonarqube以及harbor的安装集成配置(3/5)