THREE.js не отображает .obj с .mtl - экспорт файлов для THREE.js

***ОБНОВЛЕНИЕ*** Это должно быть проблема с файлами и способом их экспорта, я просто не знаю, что это за проблема. Я загрузил еще несколько примеров моделей, и все они прекрасно отображаются.

У меня возникла проблема с Three.js при загрузке файлов .obj и .mtl.

У меня есть несколько объектов и соответствующих файлов материалов, экспортированных из 3ds. Я не тот, кто экспортировал эти файлы, я не 3D-модельер, однако, если это окажется проблемой с файлами, я могу попросить разработчика моделей снова экспортировать их.

Я использовал THREE.js несколько раз и никогда не сталкивался с этой проблемой. Я загружаю файлы .mtl и .obj, используя следующее:

mtlLoader.load("stands/objects/Table&Chairs.mtl", function(materials){

            materials.preload();
            var objLoader = new THREE.OBJLoader();
            objLoader.setMaterials(materials);

            objLoader.load("stands/objects/Table&Chairs.obj", function(object){

                scene.add(object);
                object.position.set(-5, 0, 4);
            });

        });

Моя проблема в том, что объект загружается нормально, ошибок нет, однако ничего не отображается. Объект не отображается на сцене.

Если я загружаю некоторые примеры активов из других источников и переключаю загружаемые файлы, ничего не меняя, объект отображается.

Это наводит меня на мысль, что проблема может заключаться в способе экспорта файлов.

экран, показывающий, как мой .obj визуализируется

экран, показывающий визуализацию моего .obj

Экран, показывающий пример рендеринга .obj

Экран, показывающий пример рендеринга .obj

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

Я загрузил объекты и материалы здесь.

У меня это Table&Chairs, в качестве примера — файлы Tent_Poles_01.


person Colin Barstow    schedule 22.11.2018    source источник


Ответы (1)


Самое замечательное в файлах .OBJ то, что вы можете просто открыть их в текстовом редакторе по вашему выбору и посмотреть, что внутри. Это даст вам приблизительное представление о положении и масштабе:

  • Глядя на вершины в вашей модели палатки, кажется, что она имеет размер около 2 единиц в каждом измерении, центрируясь вокруг начала координат.
  • Глядя на вершины в модели Стол и стулья, мы видим, что они имеют размер в несколько сотен/тысяч единиц и начинаются примерно с (+6000,0,-2000).

Другими словами, первым подозреваемым будет ваша модель, визуализируемая где-то далеко за пределами видимого окна просмотра.

Обычно, когда вы работаете вместе с 3D-художником, вы заранее обсуждаете масштаб, в котором хотите работать, и просите его аккуратно совместить модель с исходной точкой.

Вы можете (вроде) исправить это в коде, но это будет не так практично.

  1. mesh.geometry.center() центрирует геометрию вокруг (0, 0, 0)... но учтите, что обычно это не то, что вам нужно. Например, стол будет находиться на полпути через пол в его центральном положении по умолчанию.

  2. чтобы масштабировать геометрию до абсолютного размера, используйте что-то вроде (псевдокод)

    var currentSize = new THREE.Box3().setFromObject(model).getSize();
    mesh.geometry.scale(
        targetWidth / currentSize.X, 
        targetHeight / currentSize.Y, 
        targetDepth / currentSize.Z)
    
person Paul-Jan    schedule 22.11.2018
comment
Пол-Ян, это мне очень помогло, и я очень ценю, что ты объяснил мне это. Я обсудил с 3D-художником уменьшение масштаба этих моделей. Он работал в масштабе 1:1, так что некоторые другие модели были шириной 20 метров :o неудивительно, что я не видел их в поле зрения. Еще раз спасибо! - person Colin Barstow; 23.11.2018