El problema es el siguiente:
cargo con Opengl 2 texturas y las mapeo en 2 objetos distintos, cada objeto con su textura.
Hasta ahí va todo bien, todo se visualiza correctamente en pantalla, si los acerco entre asi a los objetos la "trasnparencia" de la textura TGA funciona correctamente y se ve "invisible". Todo esto mientras los objetos mantengan el mismo valor del eje "z".
Ahora bien, note que el problema esta cuando modifica el valor del eje "z", ahí es cuando derepente lo transparente que antes correctamente NO se mostraba, ahora si se muestra...
el código es el siguiente, lo simplifico para que sea facil y no tenga agregados que no hacen a mi pregunta:
Código C++:
Ver original
void dibujar() { glClearColor(0.0,0.0,0.0,1.0); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45.0,1.0,1.0,100.0); /*Probe activando GL_ALPHA_TEST y desactivandolo y obtuve el mismo resultado en ambos casos..*/ glEnable(GL_ALPHA_TEST); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); glDepthFunc(GL_LEQUAL); glEnable(GL_DEPTH_TEST); glClearDepth(1.0); glGenTextures (1, &this->texturaObj->textura); glBindTexture (GL_TEXTURE_2D, this->texturaObj->textura); //para transparencia******************************* glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA,this->texturaObj->ancho, this->texturaObj->alto, 0, GL_RGBA, GL_UNSIGNED_BYTE, this->texturaObj->datosTextura); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); //************************************************* glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST); glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); gluBuild2DMipmaps (GL_TEXTURE_2D, 4, this->texturaObj->ancho, this->texturaObj->alto, this->texturaObj->modo, GL_UNSIGNED_BYTE, this->texturaObj->datosTextura); glBegin(GL_QUADS); glTexCoord2f(0.0, 1.0); glVertex3f(vertices[0].x,vertices[0].y,vertices[0].z); glTexCoord2f(1.0, 1.0); glVertex3f(vertices[1].x,vertices[1].y,vertices[1].z); glTexCoord2f(1.0, 0.0); glVertex3f(vertices[2].x,vertices[2].y,vertices[2].z); glTexCoord2f(0.0, 0.0); glVertex3f(vertices[3].x,vertices[3].y,vertices[3].z); glEnd(); glutSwapBuffers(); }
Aquí dejo algunas imagenes que grafican lo que digo para que sea mas entendible:
1- Aquí los dos objetos tienen el mismo valor de eje "z" (x= 0.0 y= 0.0 z= -7.0)
2- Aquí los dos objetos tienen el mismo valor de eje "z" (x= 0.0 y= 0.0 z= -7.0) y al encimarlos "mantienen" la trasnparencia de la textura.
3- Aquí el objeto que tiene el numero "2" aumenta el "z" (para el lado de la pantalla) a (x= 0.0 y= 0.0 z= -6.9) y se puede observar que la trasparencia ya no la toma y se "ve" el canal alfa que no debería verse.
3- Aquí ocurre algo extraño y es por eso que me "mareo" y no encuentro la solución.. cuando le aumento el eje "z" al objeto primero (el que no tiene el 2) a ese objeto si le toma bien la trasparencia.....
Por favor si alguien sabe por que ocurre esto y como se puede solucionar? se lo agradecería mucho ya que me volvi loco buscando por semanas (y sigo..) como solucionarlo sin encontrar una que funcione.
Desde ya muy agradecido por cualquier comentario. Saludos que esten bien!
PD: no es problema de la imagen, tiene canal alfa y es la misma imagen duplicada... me esta volviendo loco! jeje