.obj Модели и нормали
Я работаю над Three.js уже месяц, в основном изучаю, как он работает и что я могу сделать. Теперь я пытаюсь устроить Car Expo, загружая модели автомобилей.obj. Моя проблема в том, что некоторые лица машины не видны с некоторых точек зрения, как на этом изображении.
Я использую Maya 2012 и Blender 2.5, чтобы работать с моделями, неуместно пытаясь столкнуться с нормали или свернуть их, но ничего не получается. Для загрузки я использую загрузчик.obj и mtl в хранилище.
Надеюсь, вы можете помочь мне, спасибо заранее.
https://f.cloud.github.com/assets/3899568/507362/4e3a7bf0-bd6e-11e2-8a54-47b1949bba69.jpg
2 ответа
Проблема не в нормалях и не в текстурных координатах. В настоящее время существует ограничение WebGL, в котором вы можете ссылаться только на 65 тыс. Вершин для каждого вызова отрисовки, если вы используете gl.DrawElements и текущая реализация OBJMTLLoader делает. Так что вашу модель автомобиля (кстати, отличную модель) нельзя рассматривать как есть. Вы должны разделить это. Вы можете посмотреть в three.js / utils / converters / obj / split_obj.py. Но есть проблема со сценарием, задокументированная по адресу https://github.com/mrdoob/three.js/issues/2397. Так что вы не сможете увидеть материалы. Поэтому экспортируйте многие модели из Maya или Blender и убедитесь, что результирующий объект не имеет индекса лица, превышающего 65535. В противном случае снова разделите.
Также в следующем выпуске (three.js r59) я полагаю, что будет функция NormalHelper, чтобы вы могли просматривать свои нормали.
Смотрите миграцию с r49 на r50:
Координаты текстуры больше не переворачиваются в геометрии, вместо этого текстуры имеют свойство flipY (по умолчанию true); все модели должны быть реэкспортированы / реконвертированы (также были обновлены инструменты). Обходной путь: ув.v = 1 - ув.в;
У меня была похожая проблема, установив flipY в false, чтобы текстура решила ее.