当我单纯地用MTLLoader引入材质, OBJLoader引入模型并添加到场景中时, 发现模型非常得暗. 需要将环境光的强度设置到3.5左右看起来才比较正常. 但正常情况下环境光的值不应该超出1. 研究了网上提供几种不同的方式, 再加上TS对类型的限制导致绕了些弯路.

需要调整的地方有两个, 模型材质的自发光emissive 以及渲染器renderer的渲染输出方式outputEncoding. 通过控制台输出OBJ的子对象可以看到其材质的自发光emissive是没有设置颜色的( Color为一个包含rgb颜色属性的对象, ThreeJS提供了其类型, 可以自己定义color对象并用Color类型作类型断言), emissiveMap也没有配置.

现贴上部分代码和方法.

 1   import * as ThreeJS from 'three';
2 // OBJ模型子项的类型需要自己在控制台输出查看
3 import { Mesh, MeshPhongMaterial, sRGBEncoding } from 'three';
4 import { MTLLoader } from 'three/examples/jsm/loaders/MTLLoader';
5 import { OBJLoader } from 'three/examples/jsm/loaders/OBJLoader';
6
7 // ...省略代码
8
9 const mtlLoader = new MTLLoader();
10 const objLoader = new OBJLoader();
11 mtlLoader.load('/model/body/body.mtl', (material) => {
12 material.preload();
13 // mtl文件中的材质设置到obj加载器
14 objLoader.setMaterials(material);
15 objLoader.load(
16 'model/body/body.obj',
17 (obj) => {
18 // 设置模型大小
19 // obj.scale.set(2, 2, 2);
20 // 设置模型位置
21 obj.position.set(0, 0, 0);
22 obj.children.forEach((child) => {
23 const c = child as Mesh;
24 const cm = c.material as MeshPhongMaterial;
25 cm.emissive = cm.color;
26 cm.emissiveMap = cm.map;
27 });
28 scene.add(obj);
29 },
30 (xhr) => {
31 console.log(`${(xhr.loaded / xhr.total) * 100}% loaded`);
32 },
33 (error) => {
34 console.log('An error happened', error);
35 }
36 );
37 });
38 // ...省略代码
39 const renderer = new ThreeJS.WebGLRenderer();
40 renderer.outputEncoding = sRGBEncoding;

关于emissive属性的补充说明可以看这篇文章: https://www.jianshu.com/p/f9d81761ce2f

关于renderer渲染器的输出可以参考这篇文章: https://www.jb51.net/article/256430.htm

vue3 ThreeJS 引入obj模型过暗的问题的更多相关文章

  1. raycaster选取捕获obj模型&&选中高亮代码

    目录 raycaster选取捕获obj模型&&选中高亮代码 raycaster关键代码 选中高亮代码 obj整体上色 raycaster选取捕获obj模型&&选中高亮代 ...

  2. 教你如何利用threejs对3D模型皮肤进行DIY

    一步一步教你如何利用threejs加载gltf模型来实现DIY换肤功能. 模型准备 模型制作 模型可以通过网上下载,也可以自己通过c4d.maya.blender等模型制作软件得到.这里就不叙述有关模 ...

  3. Obj模型功能完善(物体材质,光照,法线贴图).Cg着色语言+OpenTK+F#实现.

    这篇文章给大家讲Obj模型里一些基本功能的完善,包含Cg着色语言,矩阵转换,光照,多重纹理,法线贴图的运用. 在上篇中,我们用GLSL实现了基本的phong光照,这里用Cg着色语言来实现另一钟Blin ...

  4. opengl导入obj模型

    在经过查阅各种资料以及各种bug之后,终于成功的实现了导入基本的obj模型. 首相介绍一下什么是obj模型 一.什么是OBJ模型 obj文件实际上是一个文本文档,主要有以下数据,一般可以通过blend ...

  5. 三维引擎导入obj模型全黑总结

    最近有客户试用我们的三维平台,在导入模型的时候,会出现模型全黑和不可见的情况.本文说下全黑的情况. 经过测试,发现可能有如下几种情况. obj 模型没有法线向量 如果obj模型导出的时候没有导出法线向 ...

  6. 君子性非异也,善假于物也 - Threejs 引入TrackballControls 查看场景

    君子性非异也,善假于物也 - Threejs 引入TrackballControls 查看场景 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循" ...

  7. OpenGL OBJ模型加载.

    在我们前面绘制一个屋,我们可以看到,需要每个立方体一个一个的自己来推并且还要处理位置信息.代码量大并且要时间.现在我们通过加载模型文件的方法来生成模型文件,比较流行的3D模型文件有OBJ,FBX,da ...

  8. 由于OBJ模型的读取引起的Release无问题Debug卡死问题

    有些时候会遇到Release版本正常运行,但是Debug无法运行甚至崩溃,原因有很多种,这里记录一下由于模型文件读取引起的Debug问题. 项目中需要读取一个obj模型文件,30M左右,Debug模式 ...

  9. Three.js中的group,obj,模型中layers层级与相机

    目录 Three.js中的group,obj,模型中layers层级与相机 layers group中的.layers.mask设置 一些设想 Three.js中的group,obj,模型中layer ...

  10. 三维引擎导入obj模型不可见总结

    最近有客户试用我们的三维平台,在导入模型的时候,会出现模型全黑和不可见的情况.上一篇文章说了全黑的情况.此文说下不可见的情况. 经过测试,发现可能有如下两种情况. 导入的模型不在镜头视野内 导入的模型 ...

随机推荐

  1. k3s 部署应用

    部署k3s 环境 名称 ip地址 cpu 内存 k3s-master 10.65.91.53 4c 8G k3s-node 10.65.91.52 4c 8G master 与 node 节点 # 改 ...

  2. Linux环境使用Docker安装MySql

    系统环境: CentOS 7.6 64位(同样适用于Ubuntu) 安装步骤: 1.创建文件夹 /home/docker/mysql/config /home/docker/mysql/data 2. ...

  3. 【mysql练习】转置,总计,分组

    1,有如下一个表,要求把这个表按照2016,2017,2018,2019,把从1月到12月的金额展示出来. profit表: year month amount2019 1 52019 3 62018 ...

  4. aspose word导出表格

    [HttpGet] [Route("GetPurchaseItemWord")] public IHttpActionResult Get_PurchaseItemWord(str ...

  5. jenkins +docker+python接口自动化之jenkins拉取gitee上的代码(四)

    1.背景 1.经过我们前面几轮的安装测试,我们已经安装了jenkins容器,python3,以及运行我们python代码所需要的第三方库在requirements.txt文件下统一安装. 2.需求 我 ...

  6. NX 二次开发,线性移动uf5943

    #include <uf.h> #include <uf_modl.h> #include <uf_part.h> #include <uf_modl_pri ...

  7. flutter json_serializable数据模型的建立和封装

    为了方便数据使用,我们将服务器拿到的数据转换为map类型,但是在使用是大量的数据会让使用map时头大,比如每个map都key都需要手动输入,很是麻烦. 本文使用了json_serializable将m ...

  8. SQL-运算

    dual表可以进行运算select * from dual; 算数运算 + - * /select 5 + 6 as aaa ,6 - 3 as bbb ,5 * 7 as ccc ,9/2 as d ...

  9. Django基础篇 02- request常用属性和返回的响应类型、pycharm创建django项目

    一.request常用属性 #django 请求对象里面的一些属性 print(request.method)#请求方式 print(request.body) #请求体 print(request. ...

  10. Microsoft Edge 浏览器中 Vue.js devtools 插件安装与使用

    下载插件 通过插件下载网站crx4chrome搜索下载,也可以直接百度"site:(www.crx4chrome.com) Vue.js Devtools"找到下载页面下载 或者通 ...