three.js — Как установить пользовательский цвет для модели * .obj, если она поставляется без файла * .mtl?

#javascript #three.js #3d #.obj #mtl-file

#javascript #three.js #3D #.obj #mtl-файл

Вопрос:

У меня есть набор моделей в формате * .obj, которые поставляются без файлов материалов (файлы * .mtl). Некоторые онлайн-сервисы отображают эти модели правильно: https://3dviewer.net /, https://sketchfab.com /. Но — в соответствии с three.js документация — в моем проекте я получаю только неправильное отображение модели: мой локальный результат

вместо: Онлайн-просмотрщик 3D (https://3dviewer.net /) результат, который использует three.js слишком

Разработчик https://3dviewer.net / сказал, что идея этого сервиса заключается в том, что если файл *.mtl не найден, то скрипт устанавливает цвет/материал по умолчанию — окрашивает все изделие в один цвет.

Как окрасить объект из файла * .obj в выбранный цвет с помощью three.js инструменты?

Для тестирования я прикрепляю файл модели, который поставляется без файла материала: тестовый образец * .obj-файла.

Ответ №1:

Кажется, объект экспортируется неправильно. При использовании macOS preview, BabylonJS или OBJLoader three.js , грани, по-видимому, имеют неправильный порядок намотки. Вы должны получить желаемый результат, выполнив следующие действия при обратном onLoad() вызове:

 const material = new THREE.MeshPhongMaterial( { color: 0xff0000, side: THREE.BackSide } );

obj.traverse( function( child ) {

    if ( child.isMesh ) child.material = material;

} );
 

Комментарии:

1. Да, именно это и привело к устранению проблемы. Теперь модель выглядит естественно.