javascriptthree.jsobjloadermtl-file

Three JS OBJloader - obj not importing properly


i'm trying to import an obj with OBJLoader but it isn't importing properly

The obj is like this - Obj img
Obj img

And it's importing this - Obj in three js
Obj in three js

What happens is that the whole obj isn't importing well.

What can i do about it ?

The code that i'm doing is

var objLoader = new THREE.OBJLoader();
        var mtlLoader = new THREE.MTLLoader();
            mtlLoader.setTexturePath("obj2/");
            mtlLoader.setPath(  "obj2/"  );
            mtlLoader.load( "Mules/Base_10.mtl", function( materials ) {
                materials.preload();
                objLoader.setMaterials( materials );
                objLoader.load( 'obj2/Mules/Base_10.obj', function ( object ) {

                        object.traverse( function ( child )
                        {
                            if ( child instanceof THREE.Mesh )
                            {
                                meshes.push(child);
                            }
                        });
                        var object = meshes[meshes.length-1];
                        object.position.y = -0.05;
                        object.position.x = 0;
                        object.position.z = 0;

                        object.name = "salto";
                        scene.add(object);
                    }, onProgress, onError );
            }); 

Thank you.


Solution

  • The problem is:

                    object.traverse(...);
                    var object = meshes[meshes.length-1]; //<-- you overriding the object, with the last mesh. 
                    object.position.y = -0.05;
                    object.position.x = 0;
                    object.position.z = 0;
    
                    object.name = "salto";
                    scene.add(object); //<-- than you add the object to your scene.
    

    do not override the object. Also you don't need to traverse through the objects, as you will add the whole thing to your scene. and you do nothing with your meshes anyway :)

    so try this:

                    object.position.y = -0.05;
                    object.position.x = 0;
                    object.position.z = 0;
    
                    object.name = "salto";
                    scene.add(object);