如果我没有 .mtl,是否可以加载带有颜色的 .obj 文件?

Is it possible to load .obj file with colors if I don't have .mtl?

我是 three.js 的新手,我遇到了这个问题。我对我的脸进行了 3D 扫描,结果只给我 .obj 文件。如果我在 Meshlab 模型上打开该文件,它就会带有颜色。但是在我将它加载到 three.js 之后,它没有纹理。

            
    
            // Loader 
            
            const loader = new OBJLoader();

            loader.load( './models/scene.obj', 
            function ( OBJ ) {
            
            var boundingBox = new THREE.Box3().setFromObject( OBJ );
            boundingBox.getCenter( OBJ.position ).negate();
            
                scene.add( OBJ );
                
            },
            
            

            function ( xhr ) {

                console.log( ( xhr.loaded / xhr.total * 100 ) + '% loaded' );

            },
            

    function ( error ) {

        console.log( 'An error happened' );

    }
);

It's how my 3D model looks on three.js

也是一边倒一边的

也试过这个解决方案,但没有用。出现“发生错误”但没有解释

objLoader.load('assets/faceimage9.obj', function(object) {
  scene.add(object);
  object.traverse(node => {
    if (node.material) {
      node.material.vertexColors = true;
    }
  });
});

感谢您的回答!

编辑:我的 .obj 最初看起来像 ~50000 行 然后点赞

这是完整的 .obj https://drive.google.com/drive/folders/1x9MaZVWHTa-wSDkv8xzdRKU-ASPuJLOw?usp=sharing

OBJ 资源定义 [0,255] 范围内的顶点颜色,THREE.OBJLoader 不支持。颜色数据必须在规范化的 [0,1] 范围内定义。不幸的是,OBJ 规范并未提及顶点颜色,因此应用程序无法始终如一地导出此类数据。

改进 three.js 中资产渲染的简单修复是:

objLoader.load('assets/faceimage9.obj', function(object) {
  scene.add(object);
  object.traverse(node => {
    if (node.material) {
      node.material.side = THREE.BackSide;
    }
  });
});

这样,应该可以正确显示面(但没有顶点颜色)。