Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Problemas De Texturizado

Iniciado por misscelan, 17 de Junio de 2005, 08:44:40 PM

« anterior - próximo »

misscelan

 Estoy con un cargador de mapas bps.

Estoy usando este código sucio y barato porque antes de meterme con nodos, hojas t demás me gustaría saber que lo que llevo hecho hasta ahora está bien.

Este es el código.


tBSPFace *pFace = &sMBSP.BSPFace[faceIndex];

glBindTexture(GL_TEXTURE_2D, todas_texturas[pFace->textureID]);

glBegin( GL_TRIANGLES );
for( int j=0; j < pFace->numMeshVerts; j++)
{
int offset = sMBSP.BSPMeshVerts[pFace->meshVertIndex+j].pMeshVerts + pFace->vertexIndex;

glTexCoord2f(sMBSP.BSPVertex[offset].vTextureCoord.u,
sMBSP.BSPVertex[offset].vTextureCoord.v);
glVertex3f( sMBSP.BSPVertex[offset].vPosition.x,
sMBSP.BSPVertex[offset].vPosition.y,
sMBSP.BSPVertex[offset].vPosition.z);

}
glEnd();


Esto está dentro de un bucle que recorre las caras.

Los vertices se ven bien, el problema son las texturas se me ven deformadas, estiradas, sucias y no ocupan toda la superficie.  (nooo)  (nooo)  (nooo)  (nooo)

La carga  está bien porque he comparado las coordenadas de las texturas con otro bsp que funciona y coincidian una a una. Lo raro es que si la variable offset sitúa bien los vértices porqué no hace lo mismo con las coordenadas de la textura. ¿?

Aquí unas fotos del problema.

http://misscelan.iespana.es/

Las dos primeras son del mapa bsp.
La tercera es una de las texturas del mapa puesta en un simpre triángulo (ahí si salen bien las cabronas).

Muchas gracias y un saludo.

BeRSeRKeR

 Ya te respondí en Flipcode pero allí creo que no pusiste las imágenes y por eso te di una respuesta incorrecta.

Viendo las imágenes el problema ya parece más claro. El problema es que tienes puesto el addressing mode de OpenGL en modo "Clamp" en vez de "Wrap". Lo que pasa es que habrán superficies que necesitarán clamp y otras wrap. ¿Cómo se sabe cuándo poner una u otra?. Pues esa información viene en los shaders de quake3 por lo que te toca cargar dichos shaders si quieres que todo se visualice correctamente. Si quieres un renderer completo de quake3, antes o después tendrás que hacerlo.

Saludos.

EDIT: para completar un poco más el tema, creo que, si el modo de texturado es clamp, tendrías que poner:

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);

y si es wrap:

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);

El que sea uno u otro te lo indica el shader correspondiente:

Si el shader te pone "map cualquier_textura", es que tienes que activar el modo wrap (o repeat en OpenGL) y si pone:

"clampmap cualquier_textura", es que tienes que activar el modo clamp.
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

misscelan

 Muchas gracias BeRSeRKeR!!!!.

Problema solucionado. Soy un novatillo y eso no lo habría sacado solo nunca.

uff menos mal.

Un saludete.







Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.