2015-06-01 14 views
5

Also schreibe ich einen Parser für Wavefront-Obj-Modell-Dateien und es gibt ein paar Unregelmäßigkeiten, ich bin mir nicht sicher, wie ich damit umgehen soll.Wavefront OBJ Format -> Gruppen & usemtl Befehl

aus meiner Lektüre So basiert, kann ein Netz in Gruppen aufgeteilt wird mit dem ‚g‘ Befehl und ein Material kann jede Gruppe zugeordnet wird, mit dem Befehl ‚usemtl‘

So eine ideale Datei aussehen würde dies wie:

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

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

etc.... 

jedoch in einigen oBJ-Dateien I (von Orten wie Turbosquid) heruntergeladen haben, habe ich eine einzelne Gruppe gesehen enthalten mehrere "usemtl" wie folgt aus:

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

g group2 
usematerial material3 
//vertices, faces, etc 

Also, wenn es mehrere Materialien pro Gruppe geben kann, was ist dann der Zweck einer Gruppe?

Werden diese Dateien als "Nicht-Standard" oder als fehlerhaft betrachtet?

Soll ich stattdessen Gesichter auf der Grundlage von freigegebenem Material statt einer gemeinsamen Gruppe gruppieren?

Wenn ich mehrere Materialien pro Gruppe habe, würde das viel von meinem Code erschweren (zum Beispiel - ich muss einen Satz von N Stichproben auf einer Gruppe von Dreiecken/Gesichtern mit einem bestimmten Material erzeugen. Wenn es nur ein Material pro Gruppe I kann einfach die Dreiecke in dieser Gruppe nachschlagen und Samples generieren.Wenn diese Gruppe jedoch einige Dreiecke mit dem richtigen Material und einige ohne enthält, müsste ich einige seltsame Materialprüfungen an der Oberseite der Gruppe vornehmen, um das Recht zu generieren Dies ist nur ein Beispiel - es gibt andere, wo dies auch ein Problem wird)

Antwort

0

Obj Meshes können nicht nur in Gruppenelemente (g), sondern auch Objekte (o) und glatte Zonen (s) gruppiert werden. Der einfachste Weg besteht darin, Gesichter auf das aktuelle Material zu setzen, das von usemtl angegeben wird, oder einfach nur durch usemetl

+0

besser machen Sie es wie Code mit Erklärung – Gahan