Busco ejemplo de carga de varias paletas a la vez....

Started by oskarg, August 25, 2016, 02:02:09 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

oskarg

Hola,buenas...
Estoy buscando un ejemplo donde se cargue diferentes graficos con sus diferentes paletas de 8 bits a la vez en bennugd .Se agradece de antemano quien me pueda ayudar al respecto.

l1nk3rn3l

en el bennupack incluye bastantes ejemplos incluyendo el que pides

https://sourceforge.net/projects/coldev/files/bennupack/

creo que es basic and medium examples..

;D

oskarg


Futu-block

Las paletas solo las hay para 8bits o también para 16?
Y cuantos colores son en total?


Futu-block


Drumpi

No exactamente.
Técnicamente los modos de 8bits son los que usan las paletas de colores por su propia naturaleza: usan 256 colores, y se referencia a cada uno de ellos mediante un byte, así puedes elegir los colores que quieras usar, ahorras memoria, y hay un montón de historia y temas técnicos que no voy a ponerme a explicar :D

PERO el modo 16bits también permite usar paletas. Teóricamente, cada paleta debe ser cargada mediante LOAD_PAL y almacenada en una variable tipo int (igual que se hace con los FPG). Se pueden cargar paletas desde ficheros tipo PAL de DIV, MAPs de 8bits y FPGs de 8bits (creo que había algo sobre paletas de photoshop, pero no recuerdo si era nativo, mediante librería, o sólo cosa de FPGEdit).
Luego, cuando se asignaba un gráfico a un proceso, este contaba con una variable local llamada PALLETTE o algo así, al cual se le debía asignar el color de la paleta cargada que se quería usar. Así, podemos tener un único FPG y varias paletas para consegir los famosos "recolor", o los cambios de paleta al estilo Megaman, diversos equipos de fútbol, etc...
La pega es que esto es sobre el papel, y nunca me ha dado por probarlo a fondo para dar información más a fondo, y no ha sido por falta de ganas.

En teoría también se podía cargar una paleta global, como se hacía en Fenix (que sólo permitía una única paleta, incluso en modo 16 bits, si no recuerdo mal) pero no he conseguido hacerlo funcionar adecuadamente, como se vio en la última crap compo (tampoco tuve demasiado tiempo para probar cosas ^^U).
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

Futu-block

bueno, ya he buscao y rebuscao y no tengo nada que llevarme a la boca

pediria, si se puede, un misero ejemplo donde se pueda modificar las paletas de 8 bit, ya que en la biblia desgraciadamente no viene

en un momento dao estaba pensando en usar un grafico modificado segun los perfiles de color, osea uno en rojo, otro en verde y otro en azul, ponerlo delante del grafico principal y jugar con el alfa; no me suena mala idea...

¿alguien lo ha catao?

Drumpi

Te lo digo de memoria porque la hora que es no puedo ponerme a mirártelo, pero creo que set_colors, pasándole como variable un array con los valores RGB que quieras (o sea, que necesitas que tenga 3 posiciones por cada color), te permitía cambiar los colores de una paleta.
Debería estar en la wiki junto con un ejemplo (o en el bennupack).
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

Futu-block

pues no, no hay mucha documentación sobre ello, hasta dicen que no trataran de hablar del tema



asi que mi unica solución es crear algo que me sirva usando los tres colores magenta cian y amarillo con su alfa, porque desgraciadamente si uso el rojo, verde y azul, como que no vá...

aparte que tambien tendré que usar el negro, es una forma que no me disgustaria si no fuera que tengo que hacer una copia del grafico en esos colores

¿hay forma humana crear una sección o alguna ''copia'' en negativo de la forma del grafico para no tener que sacar duplicados inutiles?

aparte que no me deberia de preocupar mucho porque en un fpg hay 999 graficos y se puede usar infinitos fpgs...
creo

Drumpi

Pero eso que pone:
1 - Es para novatos. Sí que se puede usar paletas en modos de 16 y 32 bits, lo que pasa es que internamente hay un paso de conversión de colores y se pierde rendimiento, cuando las paletas se han usado siempre para reducir el uso de recursos. Hoy día sólo te sirve para eso, para hacer cambios de colores fácilmente.
2- El manual se desarrolló para Fenix, y parece que esa parte está desactualizada, porque Splinter añadió, tanto para Fenix como para Bennu, el manejo de múltiples paletas en modos de 16 y 32 bits, por lo que puedes cargar vrias paletas.

Usar RGB o CMY da igual, eso es cuestión de gustos y da diferentes colores en función de los valores (otra cosa sería usar HSV), pero ten en cuenta que en modos 8bits, en ningún caso vas a tener valores de alpha.

La otra solución es usar tablas de blendops, que es lo recomendado para modos de 16bits, aunque consumen "bastante" memoria (65565*3 bytes, creo). Las hay de muchos tipos, consulta la wiki. Una de ellas te permite invertir los colores, pero te lo tengo que mirar en un antiguo código donde lo usé.

http://wiki.bennugd.org/index.php?title=Blend_table
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

Futu-block

el problema que a mi me surge es que quiero formar una imagen a raiz de muchas, para el interfaz de las caras que estoy programando, si ''abro'' la posibilidad que haya diferentes tonos de piel/cabello me sale mucho mas rentable el modificar un unico grafico hasta de 256 veces diferentes dentro del mismo programa; de la otra forma seria hacer 256 graficos distintos que a una media de 10 formas de caras me quedo sin cupo en el fpg

mi solución que parece mas razonable es hacer cada cara cinco veces (blanco, negro, magenta, cian, amarillo) y jugar con las alfas y posición. No es una cosa muy ''purista'' pero si le doy el interfaz adecuado puede resultar provechosa y quizas interesante

Luego un ''snapshot'' y a guardar como grafico nuevo en un fpg nuevo, y da igual como lo ha hecho si el resultao es bueno

En cuanto a lo del blend, no me parece mu ''guay'' andar con un codigo que todavia no entiendo, si voy a hacer una aplicación online igual no me convendrá que gaste mucha memoria, pregiero hacerlo super simplon y que cumpla su prometido

Futu-block

#12
Bueno, el apaño está hecho y me es bastante satisfactorio, por lo menos para mi:

En el ejemplo podemos ver como podemos cambiarle el color de la cara a este personajillo bajo las siguientes variables:

· Color negro     · Z arriba del tó (1)
· Color amarillo  · Z siguiente     (2)
· Color cian        · Z siguiente     (3)
· Color magenta · Z siguiente     (4)

Con las capas de colores se le puede aplicar el alfa (en fracciones de 32 por ahora) y el orden con respecto a las demas, o tambien conocida como Z, y salen unos efectos de color muy guapos con solo cuatro graficos...


pd: las teclas para modificar los valores son esas tan raras


Diseñar el interfaz grafica para dar ''coba'' no creo que sea dificil, ahora si, lo delicado será sacar un ''snapshot'' para que me lo guarde como un png, pero eso ya es otra historia, je je je

Drumpi

Te recomiendo de verdad que investigues lo de las paletas. En todo caso, puede que te interese probar también el flag aditivo con gráficos de color rojo, verde y azul puro (se usa como los flags de espejado y transparencia, y combinado con alpha creo que podría funcionar incluso mejor) ;)
Hay que experimentar en esta vida para obtener buenos resultados :P
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

Futu-block

Vale, ya lo tengo mucho mas claro y he encontrado la solución, a expensas que alguien me diga si de esta forma gasto mas memoria o es factible...


La clave es hacer una deteccion de durezas al grafico en cuestión, luego si el pixel coincide con el color en cuestion, hacemos el cambio y ya esta...
Resultado: ya se puede obtener cambiar al color deseado en rgba sobre cualquier ''grafico'' 32 bit

Incluyo ejemplo por si quereis sacaros un beneficio a mi costa que fielmente renunciaré a mi parte a menos que me obliguen a trincar la pasta, ja ja ja