Parsing fichiers .obj: Comment faire des matériaux / textures?
Question
Je suis nouveau à OpenGL. Je joue avec elle en utilisant JOGL. J'utilise ce modèle .
Je suis rendu avec succès à la fenêtre. Cependant, je voudrais appliquer des textures / matériaux. Je ne suis pas tout à fait sûr de savoir comment faire.
A partir du fichier obj:
f 6307/4525/3 6303/4524/3 6327/4523/3 6315/4526/3
usemtl kahki_light_pave_W.png
f 6445/3470/305 6437/4623/305 6593/4624/305 6597/4625/305
f 6594/4626/306 6438/4627/306 6446/4628/306 6598/4629/306
f 6595/4630/307 6439/4631/307 6447/4632/307 6599/4633/307
f 6448/3482/308 6440/4634/308 6596/4635/308 6600/4636/308
Wikipedia me dit que tout après la déclaration de usemtl
et avant la déclaration suivante usemtl
est censé utiliser khaki_light_pave_W.png
. Cependant, je ne sais pas comment faire cela dans OpenGL.
Il y a un tas de sommets définis au début du fichier:
v 19.886690 3.093822 -21.149584
v 23.886690 3.093822 -21.149584
vt 0.918121 0.920883
vt 0.918121 0.959193
vt -0.537323 1.541370
vt -0.537323 1.503060
vt 0.462677 0.503060
Dois-je besoin d'utiliser les sommets vt
pour la texture? Les déclarations de f
comprennent des indices. Sont-ils indicies dans les sommets de v
, vt
, ou les deux?
La solution
tl; dr. Les entrées de vt
spécifient les coordonnées de texture et l'indice des entrées de f
(! Base 1) en trois tableaux distincts (v
, vt
et vn
)
Des spécifications , section « données sommet Référencer « :
Pour tous les éléments, les numéros de référence sont utilisés pour identifier géométrique sommets, des sommets de texture, sommet Normales et des sommets de l'espace des paramètres.
Chacun de ces types de sommets est numérotés séparément, en commençant par 1. Cela signifie que le premier sommet géométrique dans le fichier est 1, le deuxième est 2, et ainsi de suite. Le premier sommet de texture dans le fichier est 1, le second est égal à 2, et bientôt. La numérotation continue séquentiellement dans l'ensemble fichier. Souvent, les fichiers ont plusieurs listes de données de sommet. cette numérotation séquence se poursuit même lorsque le sommet les données sont séparées par d'autres données.
En plus de comptage vertices du haut de la première liste dans la fichier, vous pouvez aussi compter les sommets arrière la liste de la position d'un élément dans le fichier. Lorsque vous comptez la liste à partir d'un élément, la référence chiffres sont négatifs. Une référence nombre de -1 indique le sommet immédiatement au-dessus de l'élément. UNE numéro de référence indique deux -2 références ci-dessus et ainsi de suite
Autres conseils
J'ai écrit un chargeur de fichiers OBJ avec une visionneuse de modèle échantillon pour afficher le modèle en utilisant LWJGL, qui est similaire à JOGL mais pas exactement la même chose. (Je l'ai utilisé à la fois JOGL et LWJGL -. En fait, je récemment passé de JOGL à LWJGL)
Je tâchais de rendre le code aussi propre et simple que possible. Malheureusement, il est « à l'ancienne » en ce qu'il utilise le pipeline de fonction fixe plutôt que shaders, mais je l'espère, il peut être assez utile et instructif pour les bases. Vous pouvez le trouver à;