解决threeJS加载obj gltf和glb模型后颜色太暗的方法

news/2025/2/6 12:23:45/

网上找到的部分解决方法  网上找到的部分解决方法 咱们有时候去glb官方下载glb或gltf模型时候,模型显示太黑

其实通过查找后不难发现网上给出了很多解决方法,但是大部分都无法从根本上解决问题。我之前看到有一篇文章对gltf的解决方法是让gltf增加自发光,相关的设置如下:

使用threeJS的过程中,刚开始总是会遇到些问题,就比如加载obj/gltf等带材质的模型时老是会出现显示效果较暗的问题。

 
 

  1. object.traverse((child) => {

  2. if(child.isMesh) {

  3. child.material.emissiveMap = child.material.map;

  4. }

  5. })

效果对比

在我也没有找到解决的办法下,我确实是使用了这种方法,前期的代码中就是采用的这种方式,我们可以来看一下使用后的效果:

未使用以上代码时的gltf效果如下图:

windows11 中 3d viewer打开后的效果如下:

这一对比,差距确实很大啊。

下面是增加child.material.emissiveMap = child.material.map;代码后的效果:

添加图片注释,不超过 140 字(可选)

这种方式,虽然光线看上去足够了,但是确丢失了细节以及发光太严重后,导致图像都失真了。经过与官方的代码的对比以及官方文档的查看,当然少不了github issue的查找,最终找到解决方法。

据官方文档所说WebGLRenderer部分,其中文档提到:

  • outputEncoding默认值是LinearEncoding

根据官方提供的examples中代码中也看到部分加载材质后的模型都修改了这个值,如下:

因此我确定,解决办法就是将LinearEncoding更换为sRGBEncoding即可。

修改代码后,可以直接看到效果如下:

可以自己在增加一些灯光效果,也就可以达到windows的3d viewer效果了

总结

默认情况下threeJS会使用线性编码(LinearEncoding)的方式渲染材质,因此会丢失真实颜色,需要改用RGB模式编码(sRGBEncoding)进行对材质进行渲染。

使用threeJS总是会遇到各种问题,不过我的建议还是多看看官方的examples代码,你会从中找到更多解决的方法的。如果你不是自己封装threeJS,那可以使用我编写好的vue-3d-loader,如果好用,记得给我start啊!记得给我start啊!如果有问题,欢迎提issue,我会及时解决bug

以上就是解决threeJS加载obj gltf模型后颜色太暗的方法的详细内容,更多关于threeJS加载obj gltf颜色太暗的资料请关注我们其它相关文章!


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

相关文章

数据库开发常识(10.6)——SQL性能判断标准及索引误区(1)

10.6. 数据库开发常识 作为一名专业数据库开发人员,不但需要掌握数据库开发相关的语法和功能实现,还要掌握专业数据库开发的常识。这样,才能在保量完成工作任务的同时,也保质的完成工作任务,避免了为应用的日后维护埋…

【Linux网络编程】:URL(encode),HTTP协议,telnet工具

🎁个人主页:我们的五年 🔍系列专栏:Linux网络编程 🌷追光的人,终会万丈光芒 🎉欢迎大家点赞👍评论📝收藏⭐文章 ​ Linux网络编程笔记: https://mp.csdn…

初入机器学习

写在前面 本专栏专门撰写深度学习相关的内容,防止自己遗忘,也为大家提供一些个人的思考 一切仅供参考 基于亚马逊的MXNet库本专栏是对李沐博士的《动手学深度学习》的笔记,仅用于分享个人学习思考以下是本专栏具体所需的环境(放…

WebSocket——环境搭建与多环境配置

一、前言:为什么要使用多环境配置? 在开发过程中,我们通常会遇到多个不同的环境,比如开发环境(Dev)、测试环境(Test)、生产环境(Prod)等。每个环境的配置和需…

分布式光伏监控解决方案-并网柜保护装置

一、并网柜防孤岛保护 继电保护及安全自动装置 根据《光伏发电站接入电力系统的技术规定》GB/T 19964-2012的相关要求,光伏发电站应配置独立的防孤岛保护装置,动作时间应不大于2s。防孤岛保护还应与电网侧线路保护相配合。 孤岛islanding 包含负荷和电源…

MySQL 进阶专题:自连接、子查询与合并查询的深入探讨

自连接、子查询与合并查询的深入探讨 在关系型数据库中,自连接、子查询和合并查询是非常重要的技术。它们不仅能解决复杂的业务需求,还可以优化代码逻辑。本文结合实际案例和SQL语句,带您深入了解这些技术的使用场景和意义。 自连接&#x…

在JAX-RS中获取请求头信息的方法

在JAX-RS中获取请求头信息的方法 HeaderParam注解,可以直接将请求头中的特定值注入到方法参数中,代码示例: import javax.ws.rs.GET; import javax.ws.rs.HeaderParam; import javax.ws.rs.Path; import javax.ws.rs.core.Response;Path(&q…

电控三周速成计划参考

第1周:基础搭建与GPIO控制 学习目标:建立开发环境,掌握最基础的硬件控制能力 每日学习(2-3小时): 环境搭建(2天) 安装Keil MDK-ARM STM32CubeMX使用CubeMX创建第一个工程&#xf…