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

Ранее я задавал этот вопрос здесь : Uncaught TypeError: THREE.MTLLoader не является конструктором

Где я получил его на работу, изменив файл Three-MTL-загрузчик. Но так как я собираюсь загрузить свою работу в github позже, мне нужно создать решение, не меняя эти файлы.

Поэтому вместо этого я пытаюсь загрузить файлы obj и mtl, используя загрузчики, используемые в классическом примере: https://github.com/mrdoob/three.js/blob/master/examples/webgl_loader_obj_mtl.html

Но я все еще получаю ошибку "Uncaught TypeError: THREE.MTLLoader не является конструктором"

Я немного не уверен в том, как бы я загружал эти загрузчики, но сейчас мой код выглядит так:

import * as THREE from 'three'
import {OBJLoader} from 'three'
import {MTLLoader} from 'three'


var mtlLoader = new THREE.MTLLoader();
mtlLoader.load("http://blabla.obj.mtl", function(materials) {
   materials.preload();
   var objLoader = new THREE.OBJLoader();
   objLoader.setMaterials(materials);
   objLoader.load("http://blabla.obj", function(object) {

       object.scale.x = scale;
       object.scale.y = scale;
       object.scale.z = scale;

       scene.add(object)

  });
});

Где в файле three.js в папке src я вставил:

export { OBJLoader } from './loaders/OBJLoader.js'
export { MTLLoader} from './loaders/MTLLoader.js'

РЕДАКТИРОВАТЬ

Я установил с помощью NPM, и ошибка исчезает. К сожалению, возникают другие проблемы - но я задал их в другом вопросе: ошибка 3-mtl-loader: THREE.MeshPhongMaterial: .shading был удален -> объект не виден

1 ответ

Решение

Документы Three.js вводят в заблуждение. Хотя MTLLoader находится в основной документации, на самом деле он не является частью базовой библиотеки Three.js. Это включено в examples/ папка Three.js.

Если вы используете синтаксис модуля ES6, у вас есть два варианта.

Вариант 1: NPM

Обычно люди публикуют подобные вещи в NPM, потому что создатели Threejs не используют современные практики разработки JS. В этом случае существует пакет npm с тремя mtl-loader.

npm install --save three-mtl-loader

а потом

import MTLLoader from 'three-mtl-loader';

Вариант 2: Скопируйте MTLLoader из источника Three.

Вы можете скопировать файл MTLLoader.js в свой проект, но не рекомендуется копировать сторонние библиотеки в локальный проект, если вы используете современные модули ES6.

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