Question

J'ai écrit un chargeur OBJ qui analyse les sommets, coords de texture, et Normales, chacun sont stockés dans un FloatBuffer et passé à opengl:

gl.glVertexPointer(3, GL10.GL_FLOAT, 0, fbVertices);
gl.glNormalPointer(GL10.GL_FLOAT, 0, fbNormals);

Cependant, je suis perplexe quant à la façon dont je suis censé passer mon tampon d'index à glDrawElements, j'ai lu que l'indice fera référence à l'index dans le tableau pour les sommets, la texture et Normales, mais à la lecture de la OBJ Description du fichier, il semble que les visages sont stockés dans un format comme celui-ci:

f 1/2/3 4/5/6 7/8/9

avec le format étant

vertice/texture/normal

glDrawElements accepte seulement 1 index, qui devrait se référer à tous les trois, mais quand je regarde un fichier OBJ réelle, cela ne semble pas possible. Comment passez-vous l'indice pour tous les 3?

Vous pouvez trouver une copie du code ici: http://codepad.org/melc1HIC

Était-ce utile?

La solution

Vous ne pouvez pas directement, vous devez faire un peu de pré-traitement avant de passer les données à OpenGL, donc un seul index est utilisé pour chaque sommet, et cet indice fonctionne aussi pour les coordonnées de texture, etc, Normales.

Autres conseils

J'ai écrit une petite bibliothèque qui analyse les fichiers .obj et inclut des exemples de code pour le rendu du modèle en OpenGL (LWJGL). Le code pour créer les VBOs est assez simple et je l'espère assez clair pour vous donner une idée de la façon dont cela fonctionne, ou vous pouvez simplement utiliser la bibliothèque, ou couper et coller de celui-ci. (La licence est du domaine public.) Jetez un coup d'oeil;

http://darksleep.com/oObjLoader/

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top