Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Texturas con paleta en OpenGL?

Iniciado por ALRAZ, 25 de Junio de 2006, 09:14:15 PM

« anterior - próximo »

ALRAZ

Wenas...

Una pregunta de Newbie OpenGLero:
:idea: Es posible "paletizar" las texturas de OpenGL?

es decir, tener una textura con paleta de 8 bits y variar esa paleta de vez en cuando para dar efectos chulos a unas cuantas gráficas.

Es posible?

marcode

Quizás puedas con glColorTableEXT, aunque al no formar parte del standard puede darte algún problema.
size=9]afortunadamente siempre ha habido alguien dispuesto a reinventar la rueda, de lo contrario seguiríamos usando un disco de piedra con un agujero.[/size]

ALRAZ

Cita de: "marcode"Quizás puedas con glColorTableEXT, aunque al no formar parte del standard puede darte algún problema.

Creo haber leido algo sobre paletas de colores de 8, 16 y 24 bits, pero hay 2 problemas:
1: no recuerdo donde lo leí
2: menos recuerdo como funcionaba (o para qué servía)

marcode

Pues que yo sepa solo vale para ahorrar memoria, y para hacer el efecto de cambio de colores que da la sensación de que se desplazan (seguro que tiene algún nombre).

si estás empezando con opengl no te será fácil, pero si te animas puedes empezar por aquí:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/opengl/glfunc01_83n8.asp
size=9]afortunadamente siempre ha habido alguien dispuesto a reinventar la rueda, de lo contrario seguiríamos usando un disco de piedra con un agujero.[/size]

ALRAZ

Cita de: "marcode"Pues que yo sepa solo vale para ahorrar memoria, y para hacer el efecto de cambio de colores que da la sensación de que se desplazan (seguro que tiene algún nombre).

si estás empezando con opengl no te será fácil, pero si te animas puedes empezar por aquí:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/opengl/glfunc01_83n8.asp

Muchas gracias Marcode. Creo que es exactamente lo que necesito.
Deja ver si he captado la idea de como funciona esto:

-Creo las texturas con glTexImage2D pasándole GL_COLOR_INDEX en el parámetro format (ante-penúltimo parámetro según leo)
-En pixels (último parámetro) le doy los pixeles indexados.
-Cuando quiera cambiar la paleta de esa textura, llamo glBindTexture para activarla
-Luego glColorTableEXT, pasándole la nueva paleta de colores como último parámetro.

Espero haber entendido bien  :roll:

ethernet

ALRAZ: en este foro tenemos la norma no escrita que cuando alguien pregunta por algo y le ayudamos, nos pone unas imágenes de lo que está haciendo .. :P pega alguna grafiquilla hombre!

ALRAZ

Cita de: "ethernet"ALRAZ: en este foro tenemos la norma no escrita que cuando alguien pregunta por algo y le ayudamos, nos pone unas imágenes de lo que está haciendo .. :P pega alguna grafiquilla hombre!

:o
mil disculpas. Mía culpa.

mmmm...
donde puedo subir imágnes?

de cualquier modo, lo único que estoy haciendo hasta ahora es un morticillo gacho para un juego de Megaman / Rockman.

Lo que pretendo lograr son los cambios de color del personaje cuando cambias de arma.

En cuanto pueda poner imágenes lo haré ;)

Pablo Zurita

Ya no se usan las paletted textures, hay varias razones y Mark Kilgard de Nvidia lo dice en este post http://www.opengl.org/discussion_boards/ubb/ultimatebb.php?ubb=get_topic;f=3;t=012877. Y si miras la especificación de EXT_paletted_texture podes ver lo mismo.

ALRAZ

Cita de: "Pablo Zurita"Ya no se usan las paletted textures, hay varias razones y Mark Kilgard de Nvidia lo dice en este post http://www.opengl.org/discussion_boards/ubb/ultimatebb.php?ubb=get_topic;f=3;t=012877. Y si miras la especificación de EXT_paletted_texture podes ver lo mismo.

algo de eso había escuchado...
mmm...

tendría que cambiar directamente los pixeles de la textura entonces?
creo que tomaría demasiado teimpo para texturas muy grandes...  :roll:
o para varias texturas

marcode

Prueba con el mapeado de color, no sé si te servirá exactamente para lo que buscas pero puedes conseguir efectos interesantes, este ejemplo mapea los colores para producir una imagen en negativo.


GLfloat Map[256];
for(int i=0; i<256; i++)
Map[i] = 1.0f - (1.0f / 255.0f * (GLfloat)i);
                     
glPixelMapfv(GL_PIXEL_MAP_R_TO_R, 255, Map);
glPixelMapfv(GL_PIXEL_MAP_G_TO_G, 255, Map);
glPixelMapfv(GL_PIXEL_MAP_B_TO_B, 255, Map);
glPixelTransferi(GL_MAP_COLOR, GL_TRUE);



Esto sí forma parte de la API de OpenGL por lo que no tendrás ningún problema en usarlo.
size=9]afortunadamente siempre ha habido alguien dispuesto a reinventar la rueda, de lo contrario seguiríamos usando un disco de piedra con un agujero.[/size]

ALRAZ

Gracias por el código marcode. Trataré de probarlo en estos días.

Mientras, y como lo prometido es deuda, aquí muestro unas fotitos de lo que estoy haciendo (o tratando de hacer XD).


No hay que perder de vista al personaje que está justo en el centro de la ventana. Los demás son sólo para porbar las "capacidades" del motor (o falta de las mismas, da igual XD)


Explico el "efecto" que intento lograr. Si alguien ha jugado alguna vez un juego de estos, sabrá que al eliminar al jefe de cada escena se obtiene un arma que representa a dicho jefe. Cuando el jugador intenta usar una de estas armas, los colores del personaje principal cambian. El azul oscuro se vuelve blanco, el azul claro se vuelve verde y cosas así.



También se puede ver dicho "efecto" en los juegos de lucha: cuando ambos jugadores escogen el mismo personaje, uno de ellos lo obtiene con una paleta de colores distinta.







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.