2015-06-01 3 views
5

Итак, я пишу синтаксический анализатор для файлов модели wavej для wavefront, и есть несколько нерегулярностей, которые я не уверен, как обращаться.Wavefront OBJ Format -> Groups & usemtl command

Так основаны от моего чтения, сетка может быть разбита на группы, используя команду «г» и материал может быть присвоен каждой группе, используя команду «usemtl»

Так идеальный файл будет выглядеть как это:

g group1 
usemtl material1 
//vertices 
//UV coords 
//faces 

g group2 
usemtl material2 
//vertices 
//UV coords 
//faces 

etc.... 

Однако в некоторых OBJ файлы я скачал (с места, как Turbosquid), я видел одну группу содержат несколько «usemtl», как это:

g group1 
usemtl material1 
//vertices, faces, etc 
usemtl material2 
//vertices, faces, etc 

g group2 
usematerial material3 
//vertices, faces, etc 

Так что, если в группе может быть несколько материалов, то какая точка группы?

Эти файлы считаются «нестандартными» или сломанными?

Следует ли мне группировать лица на основе общего материала вместо общей группы?

Наличие нескольких материалов в группе затруднит мой код (например, скажем, мне нужно создать набор из N случайных выборок на группе треугольников/граней с определенным материалом. Если есть только один материал в group Я могу просто просмотреть треугольники в этой группе и сгенерировать образцы. Но если эта группа содержала некоторые треугольники с правильным материалом, а некоторые без нее, мне пришлось бы сделать какую-то странную проверку материала поверх группы, проверяя, чтобы генерировать правильные образцы. Это только один пример - есть и другие, где это также становится проблемой).

ответ

0

Места Obj могут быть сгруппированы не только в элементы группы (g), но и объекты (o) и гладкие зоны. Самый простой способ - заставить лица ссылаться на текущий материал, указанный usemtl, или просто на группу usemtl

+0

лучше сделать его похожим на код с объяснением – Gahan

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