2010-12-01 7 views
0

Lors de l'analyse d'un fichier .obj, avec des sommets et des vertex-faces, il est facile de passer les sommets au shader et d'utiliser glDrawElements en utilisant les vertex-faces.Comment fonctionnent les visages dans .obj?

Lors de l'analyse d'un fichier .obj, avec des sommets et des coordonnées de texture, un autre type de visage apparaît: les faces de coordonnées de texture.

Lors de l'affichage de textures, outre le chargement d'images, leur liaison et la transmission des coordonnées de texture dans l'analyseur, comment utiliser les faces de coordonnées de texture? Ils diffèrent des faces de vertex et je suppose que les faces de coordonnées de texture ont un but lors de l'affichage des textures?

Cordialement Niclas

Répondre

0

Je ne sais pas ce que vous demandez, mais si je vous comprends bien, vous vous demandez comment voulez-vous stocker les données pour les coordonnées de texture pour rendre un objet 3D texturés. Si oui, vous stockez vos données sommet-normal textureCoordinate dans un format entrelacé, comme ci-dessous:

vertexX vertexY vertexZ normalX normalY normalZ textureX textureY textureZ 

une fois que vous avez un tableau de ces, vous créez alors des pointeurs vers les différentes parties du tableau et rendre comme ci-dessous :

glEnableClientState(GL_VERTEX_ARRAY); 
glEnableClientState(GL_NORMAL_ARRAY); 
glEnableClientState(GL_TEXTURE_COORD_ARRAY); 

glVertexPointer(3, GL_FLOAT, sizeof(vertexArray[0])*9, &vertexArray[0]); 
glNormalPointer(3, GL_FLOAT, sizeof(vertexArray[0])*9, &vertexArray[3]); 
glTexCoordPointer(GL_FLOAT, sizeof(vertexArray[0])*9, &vertexArray[6]); 

glDrawElements(GL_TRIANGLES, indices.size(), GL_UNSIGNED_SHORT, &indices[0]); 

Au moins c'est comme ça que je le fais. Il y a peut-être un meilleur moyen, et s'il y en a un, je serais heureux de le savoir.

+0

Salut. Tout d'abord, mon problème concerne Opengl ES 2. Désolé d'être imprécis. Mais ce que je m'interroge vraiment, c'est la partie indices, il y a 3 types d'indices dans un fichier .obj. Vertex-Faces, Texture-coordonne-faces et normal-faces. Pour être capable de mapper les textures correctement, je crois que je dois aussi utiliser les faces Texture-coordinates. – tyuip

+0

Oui, c'est correct. Si vous mappez les coordonnées vertex-texture lorsque vous initialisez votre objet, il apparaîtra correctement lorsque vous y aurez placé une texture. Si vous avez déjà utilisé un pack d'animation 3D auparavant, ils ont quelque chose appelé mapping de texture. Il indique à chaque sommet l'emplacement des coordonnées UV (0 à 1) correspondant à l'image chargée sur ces faces. Si vous texturez un objet dans un package 3d, puis l'exportez en tant que fichier obj, les coordonnées de la texture s'assureront que votre image est placée dans les zones de droits. – Davido