官方示例:
测试过程:
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赋一个颜色值
问题分析:
发现问题出在LightingStageFS.glsl中Line69行
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:
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中,还是会改变颜色
这个后续再跟进
原文地址:https://blog.csdn.net/wzwxwc1987/article/details/134719380
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_34450.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。