首页 > 解决方案 > three.js - 如何在没有 *.mtl 文件的情况下将自定义颜色设置为 *.obj 模型?

问题描述

我有一组 *.obj 格式的模型,它们没有材料文件(*.mtl 文件)。一些在线服务正确显示这些模型:https://3dviewer.net/https://sketchfab.com/。但是-根据three.js文档-在我的项目中,我只得到了不正确的模型显示: 我的本地结果

代替: 在线 3D 查看器 (https://3dviewer.net/) 结果,也使用了 three.js

开发者https://3dviewer.net/说这个服务的想法是,如果没有找到 *.mtl 文件,那么脚本会设置默认颜色/材质——用一种颜色绘制整个产品。

如何使用 three.js 工具将 *.obj 文件中的对象着色为选定的颜色?

为了测试,我附上了一个没有材料文件的模型文件:测试样本 *.obj 文件

标签: javascriptthree.js3d.objmtl-file

解决方案


似乎 OBJ 没有正确导出。使用 macOS 预览版、BabylonJS 或OBJLoaderthree.js 时,面似乎有错误的缠绕顺序。您应该通过在onLoad()回调中执行以下操作来获得所需的结果:

const material = new THREE.MeshPhongMaterial( { color: 0xff0000, side: THREE.BackSide } );

obj.traverse( function( child ) {

    if ( child.isMesh ) child.material = material;

} );

推荐阅读