2010-09-17 4 views
2

Je suis nouveau sur OpenGL. Je joue avec JOGL. J'utilise ce model.Analyse de fichiers .obj: Comment faire des matériaux/textures?

Je le rends avec succès à la fenêtre. Cependant, je voudrais appliquer des textures/matériaux. Je ne suis pas entièrement sûr de savoir comment faire cela.

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 

Wikipédia me dit que tout après la déclaration usemtl et avant la déclaration suivante usemtl est censé utiliser khaki_light_pave_W.png. Cependant, je ne suis pas sûr comment cela se fait dans OpenGL.

Il y a un tas de sommets définis en haut 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 utiliser les vt sommets pour la texture? Les instructions f incluent des index. Ces indices sont-ils dans les sommets v, vt ou les deux?

Répondre

2

tl; dr: Les vt entrées spécifient les coordonnées de texture et l'indice f entrées en trois tableaux distincts (v, vt et vn) (base 1!).

De l'spec, section « Référencer des données de sommet »:

Pour tous les éléments, les numéros de référence sont utilisés pour identifier les géométriques des sommets, des sommets de texture, sommet Normales, et les 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 second est 2, et ainsi de suite. Le premier sommet de texture dans le fichier est 1, le second est 2, et ainsi de suite. La numérotation continue de manière séquentielle dans tout le fichier . Il est fréquent que les fichiers contiennent plusieurs listes de données de vertex . Cette séquence de numérotation continue même lorsque les données de sommet sont séparées par d'autres données.

En plus de compter les sommets vers le bas du haut de la première liste dans le 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, les numéros de référence sont négatifs. Une référence numéro -1 indique le sommet immédiatement au-dessus de l'élément. Un numéro de référence de -2 indique deux références ci-dessus et ainsi de suite

+0

Ok, donc étant donné un ensemble de points de vt et une image, ce que les appels opengl dois-je appliquer la texture? Étant donné une ligne comme 'f 1/2/3 4/5/6 7/8/9', comment puis-je savoir à quelle liste de vertex il indexe? –

+0

Il y a juste une liste de vertex par OBJ: tous les éléments 'f' sont indexés dedans. – genpfault

+0

Ok, mais ce que vous avez posté ci-dessus dit que chaque type de sommet est numéroté séparément? donc si elle dit f 1/2, comment savoir si elle fait référence à v [1] et v [2] ou vt [1] et vt [2]? –

0

J'ai écrit un chargeur de fichier OBJ avec un spectateur de modèle d'échantillon pour afficher le modèle en utilisant LWJGL, qui est similaire à JOGL mais pas exactement même. (J'ai utilisé à la fois JOGL et LWJGL - en fait, j'ai récemment changé de JOGL à LWJGL.Je me suis efforcé de rendre le code aussi propre et simple que possible. Malheureusement, il est "démodé" en ce sens qu'il utilise le Pipeline à Fonctions Fixes plutôt que les shaders personnalisés, mais j'espère qu'il sera utile et instructif pour les bases. Vous pouvez le trouver à;

http://darksleep.com/oObjLoader/

Questions connexes