Je suis l'analyse d'un fichier OBJ dans Android et mon but est de rendre & afficher l'objet. Tout fonctionne bien sauf le mappage de texture correct (l'importation de la ressource/image dans opengl fonctionne correctement).Comment configurer/calculer texturebuffer dans glTexCoordPointer lors de l'importation à partir du fichier OBJ
Je ne sais pas comment remplir les données liées à la texture à partir du fichier obj dans un objet texturebuffer.
Dans le OBJ fichier que j'ai vt lignes:
vt 0.495011 0.389417
vt 0.500686 0.561346
et visage lignes:
f 127/73/62 98/72/62 125/75/62
Mes regards de tirage de routine comme (uniquement les parties pertinentes):
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glEnableClientState(GL10.GL_NORMAL_ARRAY);
gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);
gl.glNormalPointer(GL10.GL_FLOAT, 0, normalsBuffer);
gl.glTexCoordPointer(2, GL10.GL_SHORT, 0, t.getvtBuffer());
gl.glDrawElements(GL10.GL_TRIANGLES, t.getFacesCount(), GL10.GL_UNSIGNED_SHORT, t.getFaceBuffer());
Sortie des comptes du fichier OBJ:
Vertex-count: 1023
Vns-count: 1752
Vts-count: 524
/////////////////////////
Part 0
Material name:default
Number of faces:2037
Number of vnPointers:2037
Number of vtPointers:2037
Tout conseil est le bienvenu.
Salut Tommy, merci pour les explications/conseils. Cependant je ne suis pas éclairé à 100%. Je ne sais toujours pas comment construire la hashmap (ou list, vector ..) à partir des différentes combinaisons de v, vn et vt? Y a-t-il des contraintes que vous devez suivre (cela pourrait m'aider à comprendre le contexte)? Par exemple: Est-ce que la taille/nombre de vertex-, normal- et texture-Hashmap doit toujours être le même? –
Je ne peux pas vraiment faire des spécificités Android, juste des concepts. Un HashMap mappe une clé à une valeur. Vous pouvez donc avoir la chaîne '127/73/62' comme clé et la position du tableau dans la mémoire comme valeur. Cherchez 127/73/62 et si elle renvoie un nombre, mettez-le partout où vous mettez des choses à passer à glDrawElements. Si ce n'est pas le cas, prenez le prochain slot dans votre tableau de mémoire pour vertex/texcoord/normal et écrivez le combo là. Placez ensuite le numéro d'emplacement dans la HashMap comme valeur pour cette clé et utilisez-le dans ce que vous construisez pour glDrawElements. – Tommy
Salut Tommy, finalement trouvé une solution. J'ai dû dupliquer les sommets en fonction du nombre de normales dans la liste obj-face (comme vous l'avez dit). Merci. Je vais marquer la question comme résolue –