Cesium 实战 - 模型亮度调整(解决模型非常暗的问题)

news/2024/10/30 23:19:08/

Cesium 实战 - 模型亮度调整(解决模型非常暗的问题)

    • 环境版本
    • 试错过程
    • 解决问题
    • 在线示例

在某个项目中,遇到个问题,模型加载之后非常暗,经其他软件确认,模型本身正常,但是通过 Cesium 加载之后就非常暗

尤其是缩小之后,只能看到很小的一个黑块,于是尝试解决这个问题。

按惯例,经 bing 搜索,基本都是通过设置模型颜色来解决问题。还有通过设置颜色亮度来解决问题。

经过尝试,发现效果均不能达到要求,后来认为是光照问题,通过关闭地球光照、阴影、时光轴等来解决,均没有效果。

最后,发现两种方式可以解决问题:

1. 通过设置 DirectionalLight 从无限远的地方向单一方向发射的光才解决问题。

2. 通过设置时差也可以解决,但是需要知道当前时间。

本文包括:环境版本、试错过程、解决问题、在线示例三部分。


环境版本

Cesium 版本:1.105.0

在这里插入图片描述


试错过程

1. 尝试修改模型颜色以及亮度:

以下是尝试代码,经尝试,对模型暗度基本没有影响:


entity.model.color = Cesium.Color.WHITE; // 模型颜色entity.model.lightColor = new Cesium.Cartesian3(100.0,100.0, 100.0); //表示,rgb的倍数,这样就是白光增强到100倍entity.model.color = Cesium.Color.fromAlpha(Cesium.Color.RED, 1); //设置模型颜色与透明度entity.model.silhouetteColor = Cesium.Color.fromCssColorString('rgba(255,255,255,0.3)');  // 模型边框颜色
entity.model.silhouetteSize = 3;

2. 尝试关闭灯光来调整亮度。

以下是尝试代码,经尝试,调整灯光也无效:

window.viewer.scene.globe.enableLighting = false; // 关闭灯光
window.viewer.shadows = false; // 关闭阴影
viewer.terrainShadows = Cesium.ShadowMode.RECEIVE_ONLY; // 设置地形阴影
viewer.shadowMap.darkness = 0.02 // 阴影透明度--越大越透明

解决问题

1. 通过设置单一光源解决问题。

// DirectionalLight 表示 从无限远的地方向单一方向发射的光。
// 解决模型光照问题
viewer.scene.light = new Cesium.DirectionalLight({direction: new Cesium.Cartesian3(0.354925, -0.890918, -0.283358)
});

2. 通过设置时差解决问题。

这里需要注意一下,最好是获取 viewer 的当前时间,通过计算,使模型处于白天。

viewer.clock.currentTime = Cesium.JulianDate.addHours(Cesium.JulianDate.now(new Date()), 12, new Cesium.JulianDate());

经实验,通过时差解决效果会比单一光源好一些。


在线示例

镜像沙盒示例:Cesium 解决模型暗示例

在这里插入图片描述


参考博客:

cesium 6 关闭时间对于模型亮度的影响
Cesium(3):加载gltf模型后很暗的原因
cesium模型变黑的解决
CESIUM例子学习(二)——模型颜色属性
Cesium光照效果添加,且添加倾斜摄影后实现日照阴影效果
Cesium 修改当前时间,显示北京时间


http://www.ppmy.cn/news/83093.html

相关文章

磐维数据库panweidb逻辑备份恢复(示例)

磐维数据库panweidb逻辑备份恢复 1.gs_dump gs_dump是PanWeiDB用于导出数据库相关信息的工具,用户可以自定义导出一个数据库或其中的对象(模式、表、视图等),回收站对象除外。支持导出的数据库可以是默认数据库postgres&#xff0…

Async/Await

参考链接: async、await 实现原理 async 和 await 1.异步编程回顾 由于 JavaScript 是单线程执行模型,因此必须支持异步编程才能提高运行效率。异步编程的语法目标是让异步过程写起来像同步过程。 异步编程的发展经历了: 回调函数→Promise→ES7中…

复杂软件版本如何使用git工具进行管理

1.需求说明 一个项目,如果长期开发下去,我们会碰到各种各样的客户,然后就会有各种各样的需求。这时候就会出现一个问题:如果我们的代码都是一个项目,客户的主体流程都是一样,但部分客户又有一些特别的定制…

数字人的新革命,BAT的“冲高”战场

配图来自Canva可画 ChatGPT横空出世,让人们看到了数字人的另一种可能,将ChatGPT与虚拟数字人融合,研发出更加智能化、拟人化的虚拟数字人成为数字人厂商的新命题、新方向。 2月份,岭南股份、风语筑、开普云等10多家公司&#xf…

java多线程同步技术基础

说明 当程序中出现多个进程对同一资源进行操作时,因为对数据的操作非常密集,可能会对资源过度操作,这时就需要用到线程的同步技术。 以一个抢红包程序为例,红包数量为3个,开启5个线程来模拟抢红包行为,红…

Python实现ACO蚁群优化算法优化卷积神经网络回归模型(CNN回归算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 蚁群优化算法(Ant Colony Optimization, ACO)是一种源于大自然生物世界的新的仿生进化算法&#xff0c…

深入学习MYSQL-使用触发器

触发器 每个表最多支持6个触发器,(insert,update,delete)之前和之后。 删除触发器 drop trigger trigger_name;insert 触发器  在INSERT触发器代码内,可引用一个名为NEW的虚拟表,访问被插入…

API测试| 了解API接口测试| API接口测试指南

什么是API? API是一个缩写,它代表了一个 pplication P AGC软件覆盖整个房间。API是用于构建软件应用程序的一组例程,协议和工具。API指定一个软件程序应如何与其他软件程序进行交互。 例行程序:执行特定任务的程序。例程也称为过…