【问题标题】:How to import obj and mtl file to three.js如何将 obj 和 mtl 文件导入到 three.js
【发布时间】:2026-01-06 12:00:01
【问题描述】:

我很难导入这些 obj 和 mtl 文件来加载三个 js 的模型。我试试这个代码:

var loader = new THREE.OBJMTLLoader();

loader.load("test.obj", "test.mtl"); loader.addEventListener("load", function (object) {scene.add(object);}, false);

我应该做更多的事情吗?我发现了一些关于将 js/OBJMTLLoader.js 之类的脚本导入到 html.if 我应该从某个地方下载它们吗?

【问题讨论】:

  • loader.load() 中的对象路径很可能是错误的。查看示例threejs.org/examples/#webgl_loader_obj_mtl 并尝试加载您的对象。
  • 不,路径是正确的,我知道您共享的示例..我将它们与脚本放在同一个文件夹中以加载它们。我找不到任何错误..还有其他帮助吗?
  • 我的 OBJMLTLoader.js 出错了!
  • 请问你能告诉我它有什么问题吗?
  • 我相信可能是脚本本身。

标签: three.js .obj


【解决方案1】:
            var onProgress = function ( xhr ) {
                if ( xhr.lengthComputable ) {
                    var percentComplete = xhr.loaded / xhr.total * 100;
                    console.log( Math.round(percentComplete, 2) + '% downloaded' );
                }
            };

            var onError = function ( xhr ) {};
            THREE.Loader.Handlers.add( /\.dds$/i, new THREE.DDSLoader() );

        if (name == "House"){
            var loader = new THREE.OBJMTLLoader();
            loader.load( 'models/House/house_obj/house_obj.obj', 'models/House/house_obj/house_obj.mtl', function ( object ) {
                object.traverse( function ( child ) {

                    if ( child instanceof THREE.Mesh ) {

                        child.material.side = THREE.DoubleSide;

                    }

                } );


                object.rotation.x = Math.PI/2;
                 var scale = 0.15/ (MapWidth*0.5/3);//upsos tabani
                object.scale.set(scale,scale,scale);
                House = object;


            }, onProgress, onError );
            }

这是我使用的代码。在此示例中,我检查用户是否选择插入房屋模型。 onProgress 和 onError 函数说明加载程序的完整性。我使用 OBJMTLLoader.js 和 DDSLoader.js

【讨论】: