2016-02-09 5 views
3

Я пытаюсь загрузить .obj в Three.js, используя objLoader.Загрузитель Three.js .obj не работает с 3Ds Макс .obj

var loader = new THREE.OBJLoader(manager); 
       loader.load('obj/gate-2.obj', function (object) { 

        object.traverse(function (child) { 

         if (child instanceof THREE.Mesh) { 

          child.material.map = texture; 

         } 

        }); 

Все отлично работает с использованием моделей блендера, однако всякий раз, когда я пытаюсь использовать свои собственные модели 3Ds Max, то .obj не будет загружаться в браузере и выдает ошибку. Я экспортирую неправильно или делает Three.js не поддерживает 3Ds Max .obj exporter?

Сообщение об ошибке

Error: Unexpected line: s 2 
parseOBJLoader.js:339 
(anonymous function)OBJLoader.js:24 
(anonymous function)three.min.js:376:387 
+0

Попробуйте один раз, чтобы сначала экспортировать что-то простое, как куб. И проверьте, работает ли это тогда ... Какую версию используют Three.js. – Wilt

+0

@Wilt Я предполагаю, что последняя версия, поскольку я только загрузил ее на днях, модель работает при повторной визуализации в блендере, я не уверен, что проблема, однако, попробует куб сейчас! –

+0

Ну, 's 2' будет настройкой сглаживания. Поддерживает ли выравнивание поддержки загрузчика? Я бы предположил, что он просто пропустит строки, которые он не понимает. Я думаю, что это для сглаживания групп. – zero298

ответ

5

Я в настоящее время испытывает точно такую ​​же ошибку:

Error: Unexpected line: s 2 

Использование файла .obj экспортируемую 3ds Max Wavefront OBJ Exporter v0.97b - (с) 2007 guruware.

Я следил за @ 2pha link, связанным с именами отсутствующих объектов, и хотя это верно, после ввода имен объектов вручную я все еще испытывал ошибку «Неожиданная строка».

Мое решение, хотя и не является конкретным исправлением причин, по которым происходит эта ошибка, заключается в том, чтобы импортировать файл .obj в Blender (https://www.blender.org/) и немедленно экспортировать файл .obj. Кажется, что .obj-файл, созданный Blender v2.76 (sub 0) OBJ Exporter, может быть импортирован без добавления ручного труда с использованием приложения Three.js THREE.OBJLoader.

Надеюсь, что в один прекрасный день Three.js или 3ds Max исправит эту ошибку (похоже, это работает для Three.js here), но пока у кого нет времени для этого.

Update: Мы подали запрос тянуть, чтобы решить эту проблему: https://github.com/mrdoob/three.js/pull/8118, в то же время вы можете изменить ваш smoothing_pattern поддерживать несколько цифр:

Line 220: var smoothing_pattern = /^s\s+(\d+|on|off)/; 
+0

HAHA Я сделал то же самое XD, потому что в то время это было единственное, что имело смысл, и удивительно, что это раздражало, что мне пришлось скачать blender, хотя, p –

+1

Для записи я не смог открыть созданный 3ds Max. obj файл в Maya. Однако после запуска Blender это было возможно. Рад слышать, что я не единственный человек, занимающийся этим безумием! –

+1

Разве решение Blender все еще работает, когда у вас есть файл mtl, или он каким-то образом испортил его? Я попытался открыть obj в Meshlab и снова экспортировать - это изменит все имена материалов на некоторые настройки по умолчанию (material_0, material_1 и т. Д.), Поэтому это не очень полезно. – Phasma

0

Я испытываю ту же самую ошибку с 3ds Max Wavefront OBJ Exporter v0.97b и последняя версия() of threejs.

У меня нет решения, но я вижу, что проблема в том, что когда OBJLoader.js анализирует файл obj, он ищет сглаживающие группы в формате \^s\s+([01]|on|off)\, который соответствует только «s 1» или «s 0» и, таким образом, выдает ошибку при «s 2» и выше. (Вы можете проверить регулярное выражение с https://regex101.com в случае, если вы не можете прочитать регулярное выражение;))

Он работает при импорте и экспорте с помощью Blender, поскольку Blender будет экспортировать его только с «1» и «выключен» "как параметры.

Смежные вопросы