Question

Je codage mon propre analyseur obj dans objc pour OpenGL ES 2.0 pour obtenir une meilleure compréhension sur la façon dont fonctionne cette chose de OpenGLES. Chargement des sommets et montrant un modèle avec des couleurs de sommet sur elle fonctionne comme un charme. Juste une petite note. J'utilise un tampon d'index

Le vrai problème est la mise en correspondance des textures atm. Comme vous le verrez un peu plus bas, ma texture n'est pas cartographié la façon dont il devrait être.

Voici comment je pense que les œuvres de format OBJ, s'il vous plaît me corriger si je me trompe: les « f » trapézoidale décrivent un visage où le nombre avant une barre oblique définit l'indice du sommet et le nombre après le définit slash une coordonnée de texture.

Considérez le fichier obj suivant (exporté par Cinema 4D):

v -75 75 -50
v 75 75 -50
v -75 -75 -50
v 75 -75 -50

vt 0 0
vt 0 1
vt 1 1
vt 1 0

f 4/3 3/2 1/1
f 2/4 4/3 1/1

Et la texture suivante:

512x512 Texture

Maintenant, quand je positionne les sommets dans l'espace OpenGL ES 3D et essayer de tracer les coordonnées de texture à chaque sommet individuel, la mise en correspondance va mal. Je pouvais résoudre ce problème en se déplaçant dans une partie de la texture des valeurs de coordonnées, mais je me rends compte ce n'est pas la façon de le faire. J'ai aussi essayé de modifier certains de mes .obj paramètres exportateur à axises feuilles mobiles et / ou la cartographie uv autour mais non d'entre elles aboutissent dans une cartographie correcte. Y at-il quelque chose que je manque dans ma théorie concernant le format de fichier .obj? Une chose que je peux dire déjà: je l'ai lu hier que le système de coordonnées du format obj définit topLeft comme point d'ancrage d'une texture. Donc, je fixe déjà dans mon analyse.

Voici un petit résumé de la situation actuelle: Mise à jour: le système de coordonnées de la texture est le système texture obj réelle et coordonner le système de coordonnées PAS OpenGL. Je traduis les coordonnées dans mon algorithme d'analyse syntaxique pour contrer cela.

Résumé

Était-ce utile?

La solution 2

Je vais répondre à ma propre question. Le problème semblait que j'utilisais un tampon d'index pour accélérer les performances, mais mes coordonnées de texture étaient encore cartographié aux sommets d'origine

Autres conseils

Pour autant que je sache, le système de coordonnées que vous déclarez ne sont pas le bon.

En fait, il y a quelque chose comme ceci:

système de coordonnées

Je sais que ce n'est probablement pas la réponse réelle à votre question, mais je l'espère jette un peu de lumière là-dessus.

J'ai trouvé le même problème l'analyse syntaxique .obj fichiers. Dans mon cas, il semble que mes fichiers .obj utiliser inversé axe V (2ème coordonnée de texture). J'ai résolu le problème avec cette ligne de code. v = 1.0f - v;

Maurizio est correct dans sa représentation des coordonnées texturemapping opengl.

En regardant vos photos, je dirais que vous devriez prendre un meilleur regard sur votre code objc. En supposant que l'obj est correctement exporté par C4D, il semble que vous avez vos indices de texture mélangés.

preuve Plausible: passer le sommet en bas à gauche avec le sommet en bas à droite dans l'image que vous avez affichée ( « Résultat openGL ») et votre texture sortirait droite

.

EDIT: En fait, la faute peut être dans votre code de chargement de texture, mais qui ne marche pas expliquer le résultat que vous obtenez. Même si la faute était dans le chargement de texture alors la texture serait simplement apparaître à l'envers (à cause du fond à gauche opengl système de coordonnées). Suggestion: commutateur vt0 et vt3 dans votre code ...

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