Ver la versión completa : 8bpp en GP2X
Hola muy buenas, pues estoy haciendo pruebas con el remake del virtua racing para la gp2x y ya que va a ser poligonal veo inecesario usar 16 bits de colores con lo que me he decidido pasar la libreria a 8 bpp... el problema es que dese la gp32 que no toco paletas de 8bits y no tengo ni idea de como funciona en la gp2x, e estado buscando pero no encuentro nada para C todo lo que e encontrado es para fenix...
mi idea seria usar un array de 256 colores tipo short Paleta[256]; y luego como se haria para pasar la paleta de la gp2x a la que yo quiera?? uff toy muy pez con los 8bits de color :S
PD-> Uso minilib.A para inicializar el modo grafico...
No te recomiendo usar 8BPP para sombreados 3D, te vas a complicar la vida con dithering y mierdas.
masteries
12/12/2008, 02:50
Te comento como lo hice en mi proyecto fin de carrera, pero que conste que el hardware que he empleado no tiene sistema operativo así que todo ha sido "made in casa".
Yo hice así para que el ordenador me reconociera las imágenes en color de 8 bits de forma que el pc extrajera los colores de su propia paleta, aunque no es lo más adecuado no se ha desviado en absoluto, de hecho así se define el color de una imagen .bmp de 8 bits.
Al primer color de la paleta de 8 bits (paleta[0]) le haces corresponder los valores 0 para el rojo, 0 para el verde y 0 para el azul, y opcionalmente el flag de transparencia; un color de 8 bits corresponde con un color de una paleta de 24 bits de esta forma, sólo vas a utilizar 256 colores de una paleta posible de 24 bits (supón que el hardware gráfico tiene su paleta interna en forma de 24 bits y es lo único que reconoce).
La asociación la puedes hacer con un valor entero de 32 bits; por ejemplo paleta[256]=2552552550 (paleta[256]=0xFFFFFF00); y para indicarle cada campo RGB lo haces con desplazamiento de bits que en ARM es muy eficiente:
R=unsigned char((paleta[256]>>24)&0xFF);
G=unsigned char((paleta[256]>>16)&0xFF);
B=unsigned char((paleta[256]>>8)&0xFF);
flag=unsigned char(paleta[256]&(0xFF));
Tal vez el &(0xFF) no haga falta, pues el unsigned char te lo trunca a 1 byte.
Siento no poder ayudarte más Archer.
no le lieis solo esta preguntando si existe una funcion setpalette() :)
Aiken
masteries
12/12/2008, 11:16
no le lieis solo esta preguntando si existe una funcion setpalette()
Ya sabía yo que esto iba a pasar por eso me preocupé de indicarle al principio de mi mensaje:
Te comento como lo hice en mi proyecto fin de carrera, pero que conste que el hardware que he empleado no tiene sistema operativo así que todo ha sido "made in casa".
Lo de made in casa quiere decir que no he utilizado nada de terceros porque no se podía al no haber sistema operativo, así que le he explicado un poco una posible manera de hacerlo; ahora bien, cuando se pueda utilizar alguna función ya hecha, supongo que será mejor.
Sí que existe el setpalette(), o más bien el setcolorforpalette(), y está en la minilib :) Ahora no me acuerdo de cómo se usaba, pero podrás ver ejemplos tanto en AlexKidd como en Lemonboy (aunque en Lemonboy le fusilé el código a Puck, así que casi mejor ir a los orígenes :))
Aunque estoy con Zenzuke, si añades sombras en 8bpp puedes complicar mucho la cosa... Yo haría primero una prueba a 16bpp y pasar a 8 si realmente tienes problemas de rendimiento.
Tambien puedes hacerte una paleta RGB 332 y trabajar como si fuera en hicolor o 16 bits, aunque tendrás 256 colores unicamente. Esto es, q sigues trabajando con valores R,G,B en vez de indices a paletas.
TIenes mas info y una paleta uniforme mejorada por mi en mi website, aqui:
http://rlyeh.wordpress.com/2007/12/15/uniform-palettes/
Saludos
PD: Si no te enteras bien dame un toque por MP, y ponte minilib 0.C por dios xD
Muchas gracias a todos por las respuestas! mas o menos ya me ha quedado claro.
Sobre lo de no usar 8bpp por el sombreado no me preocupa, actualmente los proyectos que tengo en mente no necesitan de sombreado y prefiero rendimiento.
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions Inc. All rights reserved.