Hola a todos:
Estamos realizando un pequeño videojuego en 2D y estamos usando OpenGL. Usamos png para todas las imágenes y el problema es q en algunos ordenadores la transparencia en PNG no sale bien. Adjunto una imagen para que podáis verlo mejor:
(http://www.javielinux.com/transp.jpg)
A la derecha la que se ve mal por supuesto. Es la sombra del personaje y se ve así, como si en todas los pixel con alpha se colocaran al 50% de transparencia.
Lo raro es que pasa en algunos ordenadores. El código que uso para cargar las texturas es el siguiente:
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D , texture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glPixelStorei(GL_UNPACK_ROW_LENGTH, surf->pitch / surf->format->BytesPerPixel);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB10_A2, surf->w, surf->h, 0, GL_RGBA, GL_UNSIGNED_BYTE, surf->pixels);
glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);
¿alquien me puede dar alguna idea? ¿puede ser por problemas con la tarjeta de video y opengl?
gracias
¿Puede tener algo que ver con el valor por defecto de ALPHA_TEST?
glDisable( GL_ALPHA_TEST )
Aca le estas diciendo que use 10 bits para los colores y solo 2 bits para la transparencia, lo cual es solo cuatro tonalidades de transparencia.
GL_RGB10_A2
Cambialo por
GL_RGBA8
Saludos!
PD: En la mayoria de las placas el RGB10_A2 no esta disponible por eso es que te anda bien en algunas, pues te lo suplanta con un modo que si funcione, pero donde esta andando bien es en donde te toma el RGB10_A2.
solo por curiosidad, con qué cargas PNG? yo uso OpenIL pero es por saber alternativas.
Probaré el GL_RGBA8 con el ordenador que no funciona, aunque tendré que esperar lo menos al martes. Espero que funcione
Para cargar el PNG, estoy usando SDL y después creo la textura para OpenGL. Aquí tengo algún ejemplo por si te interesa (http://www.javielinux.com/programacion_gl.php)
saludos
Cita de: "javiel"Probaré el GL_RGBA8 con el ordenador que no funciona, aunque tendré que esperar lo menos al martes. Espero que funcione
Hagamos una apuesta entonces!
En realidad estas poniendo mal la ficha. En eso estoy seguro!
Cuando pones GL_RGB10_A2 estas diciendo que tome de 32 bits que representarian el pixel 10 para el Rojo, 10 para el verde, 10 para el azul y tan solo 2 para el canal alpha el cual utilizas luego para la transparencia.
O sea valores de 0 a 1023 para cada canal de color y de 0 a 3 para el canal alpha, o sea 4 tonos de transparencia.
El GL_RGBA8 manda 8 bits para cada canal. Con lo que tenes valores de 0 a 255 para cada color y lo mismo para el canal alpha.
El modo GL_RGB10_A2 solo esta disponible en algunas placas de video, en otras no lo esta y entonces cuando le pides a OpenGL que use esta la suplanta con una que tenga como puede ser GL_RGBA8.
La compu de tu casa no la soporta por eso es que en tu casa anda bien, pero en una placa que si esta disponible vas a ver lo que en realidad le estas pidiendo que pase, 4 tonalidades de transparencia.
Saludos!
Entonces en mi ordenador funciona bien pq es la tarjeta es peor. Que cosas
La verdad que te lo has currado, me has convencido y estoy seguro que será por eso. Tengoque estudiar más opengl, algunas veces hago cosas que no están bien ;-)
saludos y muchas gracias, ya te contaré el martes
OK, toda la suerte que vas bien!
Me ha encantado eso de que el bueno es el que se ve mal XD
dije que iba a responder el mates de la semana pasada y se me ha pasado ;-)
perfecto, era exactamente eso, muchas graciassssss
Me alegro entonces!
¿Un juego 2d con gráficos 3d prerrenderizados? ¿Puedes poner alguna capturilla? ¡Me molan esos pies! :D