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.