Uncaught TypeError: THREE.MTLLoader не является конструктором

Я довольно новичок в ТРИ, и я пытаюсь включить obj модель witl mtl в мою структуру - я установил трех-obj-загрузчик, набрав следующее:

npm install --save three-obj-loader

Затем я могу загрузить модель, например так:

import * as THREE from 'three'
import * as objlibrary from 'three-obj-loader'
let OBJLoader = objlibrary(THREE)

let scene = new THREE.Scene();
let camera = new THREE.PerspectiveCamera(75, window.innerWidth / 
window.innerHeight, 0.1, 50000);

let renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
renderer.setClearColor(0xB1B1B1, 0);
renderer.domElement.id = 'view3d'

document.body.appendChild(renderer.domElement);

//load obj-model
var loader = new THREE.OBJLoader();
loader.load("http://blabla/object.obj" , function ( object ) {
var material = new THREE.MeshLambertMaterial( { color: 0x006400 } );
object.traverse( function ( child ) {

    if ( child instanceof THREE.Mesh ) {

        child.material = material;

    }

} ); 
object.scale.x = 0.01;
object.scale.y = 0.01;
object.scale.z = 0.01;
scene.add( object );

} );

Но я хочу включить объекты MTL-файл. Я снова устанавливаю three-mtl-loader, используя npm install, и включаю в код следующее:

import * as mtllibrary from 'three-mtl-loader'
let MTLLoader = mtllibrary(THREE)

Затем я попытался использовать код, подобный следующему: https://github.com/mrdoob/three.js/blob/master/examples/webgl_loader_obj_mtl.html:

var mtlLoader = new THREE.MTLLoader();
mtlLoader.load("http://blabla/object.obj.mtl", function(materials) {
  materials.preload();
  var objLoader = new THREE.OBJLoader();
  objLoader.setMaterials(materials);
  objLoader.load("http://blabla/object.obj", function(object) {
    object.scale.x = 0.01;
    object.scale.y = 0.01;
    object.scale.z = 0.01;
    scene.add(object);
  });
});

Но затем выдается следующая ошибка: "Uncaught TypeError: THREE.MTLLoader не является конструктором", чего я не совсем понимаю, когда этого не происходит с трех-obj-загрузчиком. (Я также попытался установить objmtllloader, что приводит к той же ошибке) - Любая помощь очень ценится:)

Редактировать: Как уже упоминалось в комментариях, кажется, что Three-MTL-загрузчик не принимает ТРИ в качестве входных данных, как в трех-obj-загрузчик. Я подумал, что, возможно, вы могли бы просто изменить это (я не знаю, правильно ли я это сделал), что я попробовал, как показано здесь: https://www.dropbox.com/s/gbefq8x7roqwhww/index.js?dl=0

Теперь ошибок нет, но объект просто не отображается вообще.

1 ответ

Фактически изменение mtl-загрузчика на: https://www.dropbox.com/s/gbefq8x7roqwhww/index.js?dl=0, решило проблему:D

Другие вопросы по тегам