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

标签 javascript three.js 3d-model objloader

我是 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 行 My obj 然后像这样enter image description here

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

最佳答案

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

three.js 中改进 Assets 渲染的一个简单修复是:

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

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

关于javascript - 如果我没有 .mtl,是否可以加载带有颜色的 .obj 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71771936/

相关文章:

javascript - 从数据对象数组创建折线图

javascript - 在Extjs中创建一个没有字段的只读文本字段

three.js - 模型出现时 FPS 下降 - Three.js

c++ - 将 3d 模型导入 Direct3D 11 示例

cesiumjs - gltf 模型失去了照明并且很暗

php - 如何将此 JavaScript <div> 数据自动填充到 PHP 表单?

javascript - Three.js:将图像添加到 6 立方体全景中的纹理底部作为热点

javascript - 使用 three.js 折叠矩形以形成立方体

azure - 用于与 Azure 数字孪生中的 3D 模型交互的 API

javascript - 我的项目中可以有多个 gruntjs 文件用于代码组织吗?