THREE.JS загружает текстуры из файла OBJ/MTL на полпути

У меня есть OBJ, MTL и текстурные изображения, экспортированные из Cinema 4D, Дизайнеры дали мне файлы в формате ZIP. Я пытаюсь отобразить их с помощью THREE.JS, Я использую следующий код:

    var mtlLoader = new THREE.MTLLoader();
    mtlLoader.setPath('shipka-obj/');
    mtlLoader.load('shipka.mtl', function (materials) {
        materials.preload();
        var objLoader = new THREE.OBJLoader();
        objLoader.setMaterials(materials);
        objLoader.setPath('shipka-obj/');
        objLoader.load('shipka.obj', function (object) {
            scene.add(object);
        });
    });

Проблема в том, что в памятнике отсутствуют детали:

Дизайнеры говорят, что я делаю что-то не так, но я не вижу, что это может быть? Пожалуйста помоги! Благодарю.

РЕДАКТИРОВАТЬ: я загрузил zip с изображениями obj, mtl и текстуры в Dropbox. Вот ссылка. https://www.dropbox.com/s/ah8yhjadgihrihr/shipka-obj.zip?dl=0

1 ответ

Решение

Вы не сделали ничего плохого. Я посмотрел на ваш OBJ, и похоже, что человек, который моделировал геометрию, сделал несколько ошибок:

Лица:

Three.js может отображать только трехсторонние грани (треугольники). Он понимает четырехугольники, которые он автоматически подразделяет на треугольники, но он не знает, как обрабатывать грани с пятью или более ребрами. У OBJ, которое вам дали, плохое тесселяция, с восемью, двенадцатью, иногда даже 20-гранными лицами!

введите описание изображения здесь

Как вы можете видеть, грани с более чем 4 ребрами не отображаются в Three.js, но квадраты и трис отображаются так, как и ожидалось:

введите описание изображения здесь

Я рекомендую вам запросить сетку с лучшим тесселяцией. Попросите, чтобы все его лица были уменьшены до квадратов или трис, чтобы избежать этой проблемы.

нормативы

На изображении ниже вы можете видеть, что платформа, на которой находится ваша структура, имеет нормали, указывающие внутрь:

введите описание изображения здесь

Рендерер Three.js считает, что вы хотите, чтобы лица указывали в этом направлении. Вот почему вы можете видеть нижнюю сторону далеких склонов этой платформы, но не самые близкие к камере:

введите описание изображения здесь

Я рекомендую попросить вашего 3d-художника пройтись по геометрии и убедиться, что все нормали обращены наружу, а не внутрь, таким образом, средство визуализации понимает, какую сторону граней вы хотите визуализировать.

В качестве альтернативы вы можете попросить, чтобы средство визуализации отображало заднюю сторону или обе стороны граней, но я не рекомендую этого, потому что вы будете выбирать и выбирать объекты весь день. Кроме того, в вычислительном отношении дороже рендерить обе стороны.

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