Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





RGB to RGBA en texturas en OGL

Iniciado por Loover, 30 de Noviembre de 2002, 05:15:37 PM

« anterior - próximo »

Loover

                                ¿Hay alguna forma de transformar una textura de formato RGB a RGBA? Digo la textura, no la imagen en memoria (supongamos que una vez creada la textura hemos liberado de memoria la imagen original)

Lo pregunto para OpenGL

Y lo necesito para hacer un glTexSubImage2D entre dos texturas cualesquiera, puesto que no funciona entre dos con distinto tipo... tendre que pasar la RGB a RGBA (o viceversa).                                
IndieLib Libreria 2.5d utilizando aceleración por hardware para la programación de juegos 2d.
Indie Rover The monkeys are reading!

Degiik

                                Creo que No hay ninguna forma, puesto que de una texturas tienes el numero que la referencia y no el puntero de memoria hacia ella. Y no me suena ninguna api de OpenGL que transforma un tipo de textura a otro. :?:

Saludos. :D                                
egiik: h-O-5 hoja/ingestión 100mo Vida suspendida ( 1 día )

Loover

                                sabía que la respuesta iba a ser esa :( buaaaaaa                                
IndieLib Libreria 2.5d utilizando aceleración por hardware para la programación de juegos 2d.
Indie Rover The monkeys are reading!

Vanch

                                Pero por que llegas a ese punto ? puedes tener la imagen en memoria con un puntero. En un post mas abajo... http://www.stratos-ad.com/forums2/viewtopic.php?t=1033 ... tienes una funcion hice el otro dia para añair el valor Alpha. No se cual sera tu caso, pero leer otra vez del HD y con esa función lo cambias. O bien ya desde el principio puedes tener la textura con RGBA. Supongo que dependera de tu proyecto.

Suerte  :P                                
anch!!! Vanch!!!, don't let me alone.

Loover

                                Por eso decía lo de que la imagen original ya no estaba en memoria. No pienso tener para cada textura la imagen en memoria (madre mia, obligaria a comprarse a la gente 1024 de ram, :P ) En cuanto cargo la textura, la elimino. Y lo de tenerlas todas en RGBA, es como lo hago ya mismo... pero había pensado tenerlas en RGB (y por lo tanto ocupando menos) y pasarlas a RGBA solo cuando fuera necesario.

Al final he decidido que la libreria 2d que estoy programando haga esto (decirme que os parece):
Que te permita cargar las imagenes y guardarlas de tres formas diferentes:
LOV_OPAQUE => Se guardaran en modo RGB
LOV_SPRITE => Se guardaran en modo RGBA (pero al renderizarlas no se usará blend, sino alpha test al color seleccionado como color key)
LOV_ALPHA => RGBA y se renderizarán usando blending

Usaré tres listas: primero renderizaré las dos primeras (OPAQUE y SPRITE) con el depth test activado. Luego pondre el depth test en modo "read-only" y pasare a ordenar la tercera lista (ALPHA) para dibujar primero las mas alejadas (sino el blending no se realizaría correctamente) y a renderizarlas.

Las funciones de retoque entre imágenes (por ejemplo recortar un trozo de imagen y ponerlo en otra) sólo se podran hacer entre tipos iguales (aquí es donde me joroba que no se pueda cambiar de RGB a RGBA). Pero bueno, no es tan grave.

Voy al tema :D

Vanch... ¿Eres Degiik?                                
IndieLib Libreria 2.5d utilizando aceleración por hardware para la programación de juegos 2d.
Indie Rover The monkeys are reading!

Degiik

                                " Vanch... ¿Eres Degiik? "

Si soy Degiik, me explico, Vanch es mi hermano pequeño. Cuando me dejo el ordenador, me olvide de hacer un logout. Sorry  :!:  :!:  :!:                                
egiik: h-O-5 hoja/ingestión 100mo Vida suspendida ( 1 día )

ethernet

No entiendo muy bien por q no le pasas a opengl la textura en rgba y despues usas el alpha o no en funcion de tus necesidades.

saludos

Loover

                                Para ahorrar un mísero byte por cada pixel, :D
Si es de tipo LOV_OPAQUE, sabré que NUNCA necesitará canal alpha. Y un byte menos por pixel... pues algo es algo.
No sé, no sé... las LOV_OPAQUE las utilizarían (sino llevan transparencia) sobre todo para fondos... y scrolles tochos... por lo que un byte menos puede significar mucho ahorro. 1/4 menos exactamente :)                                
IndieLib Libreria 2.5d utilizando aceleración por hardware para la programación de juegos 2d.
Indie Rover The monkeys are reading!

ethernet

Sera un byte en el caso de q el formato sea de 32 bits. De todas maneras mirate los formatos internos q soporta opengl, yo creo q no merece la pena ahorrarse unos bits y despues tener q hacer transformaciones a pelo. Si encuentras una funcion q lo haga vale, pero si no.. :_(

saludos

Loover

                                No, relee el post de más arriba. ¿Que transformaciones a pelo? El usuario de la libreria decidirá que tipo de imagen (independientemente de que sea jpeg, bmp, png, tiff, lo que sea) será. (LOV_OPAQUE, LOV_SPRITE, LOV_ALPHA). Y una vez cargada la imagen ya esta, ya no hay más transformaciones.
Ejemplo: si el usuario carga un tga (BGRA) y le mete como parámetro LOV_OPAQUE. Yo lo pasaré (esto ya esta hecho) a RGB (adios al alpha, saldra negro).
Si quiere sinembargo que se respete el canal alfalfa, pues usará LOV_ALPHA (RGBA).
Los LOV_SPRITE por su parte se almacenan como RGBA, y los pixeles transparentes tendra valor alpha 0 y el resto 255 y NO USARE BLENDING, sino ALPHA TEST, pues no hay degradado de transparencia, sino colorkey. (alpha test tiene un coste bastante menor que el blending).

Bueno, sigo con le tema                                
IndieLib Libreria 2.5d utilizando aceleración por hardware para la programación de juegos 2d.
Indie Rover The monkeys are reading!

Ithaqua

                                Lo que no entiendo es lo de pasar de una textura a otra, glTexSubImage2D no pasa de una textura a otra.                                
thaqua^Stravaganza
http://ithaqua.stravaganza.org

Ithaqua

                                Y otra cosa, ahorrar no creo que ahorres porque aunque una textura sea RGB, internamente se almacena en 32 bits.                                
thaqua^Stravaganza
http://ithaqua.stravaganza.org

Loover

                                Eso es lo que digo. Que glTexSubImage NO PASA DE UNA TEXTURA A OTRA :( si una esta en RGB y otra en RGBA, hay que joderse.
Y oye! no sabia lo de que internamente lo guardara asi. Usare entonces RGBA y punto.

PD: os recomiendo OpenIL para cargar formatos gráficos. Una maravilla de libreria                                
IndieLib Libreria 2.5d utilizando aceleración por hardware para la programación de juegos 2d.
Indie Rover The monkeys are reading!






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.