Foros - Stratos

Programadores => Programación gráfica => Mensaje iniciado por: ZüNdFoLGe en 18 de Mayo de 2010, 05:12:42 AM

Título: .OBJ: relacion entre vertices de textura (vt) y vertices del modelo (v)
Publicado por: ZüNdFoLGe en 18 de Mayo de 2010, 05:12:42 AM
He implementado mi propio cargador de modelos .obj  y  hasta ahora va todo sobre ruedas, excepto al mapear una textura al modelo.

Para expresar mi duda presento el siguiente ejemplo:    cargar un prisma y aplicar al mismo una textura (ver JPG). La textura la hice al vuelo en paint asique no se pongan detallistas... :P


(http://img687.imageshack.us/img687/337/pruebavy.jpg) (http://img687.imageshack.us/i/pruebavy.jpg/)

en la especificacion del modelo (.obj) el prisma podemos verlo asi (es el mismo del jpg):

v -24.000000 7.838379 10.793568
v -24.000000 1.911621 10.793568
v -18.500000 7.838379 10.793568
v -18.500000 1.911621 10.793568
v -18.500000 7.838379 -16.793570
v -18.500000 1.911621 -16.793570
v -24.000000 7.838379 -16.793570
v -24.000000 1.911621 -16.793570
# 8 vertices

vt 0.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 1.000000
vt 1.000000 0.000000
# 4 texture coordinates

vn 0.000000 0.000000 1.000000
vn 1.000000 0.000000 0.000000
vn 0.000000 0.000000 -1.000000
vn -1.000000 0.000000 0.000000
vn 0.000000 1.000000 0.000000
vn 0.000000 -1.000000 0.000000
# 6 normals


Ahora  en la funcion de renderizado, yo dibujo el modelo triangulo a triangulo, tomando los vertices correspondientes. Por este motivo me surge la duda de como mapear la textura "al conjunto de triangulos que compone el modelo".

Esto lo hago asi:


glBegin(GL_TRIANGLES);
for(int i = 1; i < TriangleCount; i++) // for each face
{
glTexCoord2f(0.f,0.f);  // A LO BESTIA PARA VER LA TEXTURA
glNormal3f(Verticies[Triangles[i].v1].Normal.x, Verticies[Triangles[i].v1].Normal.y, Verticies[Triangles[i].v1].Normal.z);
glVertex3f(Verticies[Triangles[i].v1].Pos.x, Verticies[Triangles[i].v1].Pos.y, Verticies[Triangles[i].v1].Pos.z);
           
glTexCoord2f(0.f,1.f);  // A LO BESTIA PARA VER LA TEXTURA
glNormal3f(Verticies[Triangles[i].v2].Normal.x, Verticies[Triangles[i].v2].Normal.y, Verticies[Triangles[i].v2].Normal.z);
glVertex3f(Verticies[Triangles[i].v2].Pos.x, Verticies[Triangles[i].v2].Pos.y, Verticies[Triangles[i].v2].Pos.z);
           
glTexCoord2f(1.f,1.f);  // A LO BESTIA PARA VER LA TEXTURA
glNormal3f(Verticies[Triangles[i].v3].Normal.x, Verticies[Triangles[i].v3].Normal.y, Verticies[Triangles[i].v3].Normal.z);
glVertex3f(Verticies[Triangles[i].v3].Pos.x, Verticies[Triangles[i].v3].Pos.y,Verticies[Triangles[i].v3].Pos.z);
}
glEnd();


En este caso como indico en los comentarios he hecho el mapeo a lo bruto para ver la textura, pero se que esta mal indicar las coordenadas de la textura de esa forma.

Entonces, sabiendo que tengo las coordenadas de la textura en el .obj, como hago para aplicar correctamente las texCoord a los triangulos en el renderizado? Es decir, como hacer para "envolver" el prisma con la textura a partir de las coordenadas de textura del .obj? Supongo que debe haber alguna forma generica para cualquier figura geometrica, y ahi reside mi duda.

Agradezco cualquier tipo de ayuda  :D

Gracias de antemano
Título: Re: .OBJ: relacion entre vertices de textura (vt) y vertices del modelo (v)
Publicado por: tamat en 18 de Mayo de 2010, 12:04:12 PM
joder, lo mismo que con el resto, es como si pones a todas las caras la misma normal y preguntas, ¿como pongo las normales bien?

leñe, pues leyendolas del archivo!

cada vertice de cada cara tiene una coordenada que te viene en el OBJ, ahora mismo no se la sintaxis pero miratela y guardalas.
y a la hora de pintar haces lo mismo que con las normales
Título: Re: .OBJ: relacion entre vertices de textura (vt) y vertices del modelo (v)
Publicado por: ZüNdFoLGe en 18 de Mayo de 2010, 02:36:31 PM
joder estaba trabajando a mano vertice a vertice era imposible poder asociar las texturas asi....

acabo de ver que el formato de la descripción de cada vértice del conjunto de polígonos que compone el modelo esta compuesto por las componentes de v1/vt1/vn1, y con ello sé la posición del vértice, las coordenadas de la textura y la ubicación de la normal

Gracias hombre