THREE.js не рендеринг .obj с .mtl - экспорт файлов для THREE.js - PullRequest
0 голосов
/ 22 ноября 2018

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

У меня проблема с 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 рендерится

screen showing of my .obj being rendered

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

Screen showing the example .obj being rendered

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

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

Мои таблицы и стулья, примерами являются файлы Tent_Poles_01.

1 Ответ

0 голосов
/ 22 ноября 2018

Самое замечательное в файлах .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)
    
...