Sami
Sami

Reputation: 341

ThreejS: Uncaught TypeError: e.OBJMTLLoader is not a constructor

I am trying to replace a cube mesh with a car mesh using .obj and .mtl files (using three.js)

But every everytime I got this error:

Uncaught TypeError: e.OBJMTLLoader is not a constructor

I made sure to include the library () and there is no typo.

This is how I load the mesh model:

var loader = new THREE.OBJMTLLoader();
loader.load('./toycar.obj', './toycar.mtl',
    function (object) {
        toycar = object;
        toycar.rotateX(-12); //toycar.rotateZ(-10.99);
        toycar.rotateY(4.718);
        scene.add(toycar);
    });

and this is how I use it to move the model on the y axis:

if (toycar != undefined){
        toycar.position.y = disp * 0.07; // z for rightLeft, y for upDown

        var relativeCameraOffset = new THREE.Vector3(5, 0, 0); // change camera offset
        var cameraOffset = relativeCameraOffset.applyMatrix4(toycar.matrixWorld);
        camera.position.x = cameraOffset.x;
        camera.position.y = cameraOffset.y;
        camera.position.z = cameraOffset.z;
        camera.lookAt(toycar.position);
    }
    

At this point, I am not sure what caused this error to happen.

Upvotes: 2

Views: 139

Answers (1)

Mugen87
Mugen87

Reputation: 31026

THREE.OBJMTLLoader does not exist in the repository. There is only OBJLoader and MTLLoader. The latter one is only required if you want to load materials, too.

I suggest you study webgl_loader_obj_mtl to show how both are used. Typical code looks like so:

new MTLLoader().load( 'materials.mtl', function ( materials ) {

    materials.preload();

    new OBJLoader()
        .setMaterials( materials )
        .load( 'object.obj', function ( object ) {

            scene.add( object );

    } );

} );

Upvotes: 2

Related Questions