Как преобразованные файлы OBJ->JSON с несколькими текстурами отслеживают отображение текстур лица?
Вопрос
Я пытаюсь вручную (без таких библиотек, как Three.js) загрузить 3D-модель JSON в свой код WebGL просто для развлечения, но мне трудно, когда мои модели имеют более одной текстуры.Как в преобразованном файле OBJ->JSON узнать, какая текстура является «активной» для следующих лиц?В файлах OBJ используется тег «usemtl» для идентификации используемой текстуры/материала, но я не могу найти такой указатель при работе с JSON.Со временем я использую конвертер OBJ->JSON, написанный измененныйq
Спасибо кучу, стержень
Решение
Взгляните на этот файл: three.js / src / extras / loaders / JSONLoader.js
.
Первый элемент каждого лица в faces
Массив файла JSON - это немного поля. Первый бит говорит, что если у этого лица есть три индекса. И второй бит говорит, что если у этого лица назначен материал. Индекс материала, если таковой имеется, появляется после индексов.
Пример: faces: [2, 46, 44, 42, 0, 1, 45, 46, 48, 3, ...
Первое лицо (треугольник с материалом):
Type: 2 (00000010b)
Indices: 46, 44, 42
Material index: 0
Второе лицо (квадроцикл без материала):
Type: 1 (00000001b)
Indices: 45, 46, 48
Третье лицо (квадроцикл с материалом):
Type: 3 (00000011b)
Indices: ...
Проверьте исходный код для полного значения этого битового поля.
Другие советы
В конвертере OBJ->JSON, который я написал для игрового движка KickJS, каждый материал имеет свой диапазон индексов.
Это означает простую модель OBJ, например
mtllib plane.mtl
o Plane
v 1.000000 0.000000 -1.000000
v 1.000000 0.000000 1.000000
v -1.000000 0.000000 1.000000
v -1.000000 0.000000 -1.000000
usemtl Material
s 1
f 2 3 4
usemtl Material.001
f 1 2 4
Было бы переведено на это (С двумя индексами;по одному на каждый материал):
[
{
"vertex": [1,0,1,-1,0,1,-1,0,-1,1,0,-1],
"name": "Plane mesh",
"normal": [0,-1,0,0,-1,0,0,-1,0,0,0,0],
"indices0": [0,1,2],
"indices1": [3,0,2]
}
]
Используйте онлайн-просмотр моделей для преобразования:
http://www.kickjs.org/example/model_viewer/model_viewer.html