Foros del Web » Programación para mayores de 30 ;) » C/C++ »

OpenGL - no se visualiza el color transparente de una textura al modificar el eje z

Estas en el tema de OpenGL - no se visualiza el color transparente de una textura al modificar el eje z en el foro de C/C++ en Foros del Web. Hola a Todos! como estas? estoy teniendo un problema que me esta siendo muy dificil de arreglar por que no encuentro el error.... El problema ...
  #1 (permalink)  
Antiguo 09/09/2012, 18:56
Usuario no validado
 
Fecha de Ingreso: febrero-2012
Mensajes: 24
Antigüedad: 12 años, 9 meses
Puntos: 0
Pregunta OpenGL - no se visualiza el color transparente de una textura al modificar el eje z

Hola a Todos! como estas? estoy teniendo un problema que me esta siendo muy dificil de arreglar por que no encuentro el error....

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
  1. void dibujar()
  2.             {
  3.                 glClearColor(0.0,0.0,0.0,1.0);
  4.                 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  5.                 glMatrixMode(GL_PROJECTION);
  6.                 glLoadIdentity();
  7.                 gluPerspective(45.0,1.0,1.0,100.0);
  8.                
  9.  /*Probe activando GL_ALPHA_TEST y desactivandolo y obtuve el mismo resultado en ambos casos..*/
  10.                 glEnable(GL_ALPHA_TEST);
  11.                 glEnable(GL_BLEND);
  12.                 glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
  13.  
  14.                 glDepthFunc(GL_LEQUAL);
  15.                 glEnable(GL_DEPTH_TEST);
  16.                 glClearDepth(1.0);
  17. glGenTextures (1, &this->texturaObj->textura);
  18.                
  19.                 glBindTexture (GL_TEXTURE_2D, this->texturaObj->textura);
  20.                 //para transparencia*******************************
  21.                
  22.                 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA,this->texturaObj->ancho, this->texturaObj->alto,  0,  GL_RGBA, GL_UNSIGNED_BYTE, this->texturaObj->datosTextura);
  23.                 glEnable(GL_BLEND);
  24.                 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
  25.                 //*************************************************
  26.                
  27.                 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  28.                 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST);
  29.                 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
  30.  
  31. gluBuild2DMipmaps (GL_TEXTURE_2D, 4, this->texturaObj->ancho, this->texturaObj->alto, this->texturaObj->modo, GL_UNSIGNED_BYTE, this->texturaObj->datosTextura);
  32.  
  33.  
  34.                 glBegin(GL_QUADS);
  35.                    
  36.                     glTexCoord2f(0.0, 1.0);
  37.                     glVertex3f(vertices[0].x,vertices[0].y,vertices[0].z);
  38.            
  39.                     glTexCoord2f(1.0, 1.0);
  40.                     glVertex3f(vertices[1].x,vertices[1].y,vertices[1].z);
  41.  
  42.                
  43.                     glTexCoord2f(1.0, 0.0);
  44.                     glVertex3f(vertices[2].x,vertices[2].y,vertices[2].z);
  45.                
  46.                     glTexCoord2f(0.0, 0.0);
  47.                     glVertex3f(vertices[3].x,vertices[3].y,vertices[3].z);
  48.  
  49.  
  50.                 glEnd();
  51.  
  52.                 glutSwapBuffers();
  53.            
  54.             }


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

Última edición por fabian_n7; 12/09/2012 a las 21:48 Razón: mas información

Etiquetas: gl_alpha_test, opengl, texturas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:04.