Sombra dinamica

Started by peterpollito, November 02, 2011, 09:25:26 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

peterpollito

Estamos aqui discutiendo como hacer un proceso sombra...
De esto hable hace un tiempo pero no consigo encontrar el post, sorry.
Bueno, la idea es poder aplicar una sombra a cualquier proceso (imagen o animacion), por ejemplo a un personaje, un arbol o un arbusto.

La cuestión es que hemos pensado en hacer un clon del proceso y aplicarle efectos.
La cuestión es que el proceso original será 32bits, la sombra en 16bits...para eso tenemos un codigo de Prg que lo hace.
Ahora se plantea el problema aplicarle el angulo y lo chungo, ponerla en negro y luego el alpha.


¿Se puede hacer y que rinda bien?

Es que otra opción es hacer fpgs a 8 bits y ya esta, pero no es lo mismo...

Un saludo!

josebita

Para lo de ponerla en negro y el alfa podeis usar la mod_effects.
Yo para mi karaoke creé una rutina que hace una sombra de 32 bits en la que el alfa va aumentando, igual os vale pra algo:
http://code.google.com/p/bennugd-karaoke/source/browse/trunk/inc/misc.inc#353

Aunque claro, mis reflejos no eran dinámicos...

KeoH

para la forma del clon podeis probar a hacer un size_y=10 y size_x=110 por ejemplo xD a ver q sale xD

Outlaw

Hola PeterPollito, yo hice una sombra que aplico a todos los procesos que se muevan (por el momento) por ejemplo, personajes y enemigos. Te paso el codigo:


[/code]



// este proceso lo que hace es agregarse a todo proceso que se mueva, por ejemplo prota
// para luego generar a partir del graph del padre (el que lo llama) una sombra que
// lo sigue a todos lados, porque eso es lo que las sombras hacen ¿no? XD
// el único parámetro que necesita es el archivo del proceso que lo invoca
Process Sombra(file)
Private
   int x_objetivo;
   int y_objetivo;
   int ancho_mapa,alto_mapa;
End
Begin
   region=0;
   ctype=c_scroll;
   z=father.z+1;
   alpha=120;
   Repeat
      graph=map_clone(file,father.graph);
      ancho_mapa=map_info(file,graph,g_width);
       alto_mapa=map_info(file,graph,g_height);
      For(x_objetivo=0;x_objetivo <= ancho_mapa;x_objetivo++)
         For(y_objetivo=0;y_objetivo <= alto_mapa;y_objetivo++)
            If(Map_get_pixel(file,graph,x_objetivo,y_objetivo) <> rgba(0,0,0,0))
               Map_put_pixel(file,graph,x_objetivo,y_objetivo,rgba(1,1,1,255));
            End
         End
      End
      angle=father.angle; 
      x=father.x-5;
      y=father.y;
      Frame;
   Until(not(exists(father)))
End





Lo que hice en una version mas avanzada del programa (que tengo en la netbook!!) es: que a la x del proceso se le resta una cantidad distinta, segun de donde venga el sol hipotetico del escenario, entonces, se hace un switch, y se define una variable cuando se lo llama al proceso, con una constante que sea: mañana - tarde - noche. Segun cada constante se le va a indicar cuanto restar de x o de y, etc. Y tambien hice un par de cosas para convertir el angulo a valores entre 0 y 360, el viernes si puedo te lo subo, obvio, si es que te interesa! saludos!
"Life is cheap when the bounty is high"

Drumpi

El ángulo, quieres decir hacer que se incline ¿no? eso me temo que tendrías que copiar el mapa línea por línea. Lo de Alpha está claro.
Lo de ponerlo en color negro, no se si RGBSCALE puede servirte para lo que necesitas, he experimentado demasiado poco con ella para decirte si te vale o no.
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)

La momia que fuma

Yo también pensaba que rgbscale podía ser la solución, pero creo que no va en 32 bits...igual no la he usado bien y metí la pata en algo, pero probe a 16 y ahi si funcionaba.

SplinterGU

si va en 32 bits... (en la ultima version)
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

La momia que fuma

#7
Genial!  ;D


Pero acabo de probar otra vez bajando los últimos binarios para windows y no va, quizá los de la última versión aun no estan compilados para Windows?


(La versión que bajé dice RC27(r270), no se si es realmente la última)

SplinterGU

es esa, y si estan...

pone el ejemplo que decis no te funciona.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

La momia que fuma

Aqui va, son dos prgs practicamente idénticos, la única diferencia es que uno hace el set_mode en 32 bits y carga un fpg de 32 bits, y el otro lo hace todo en 16.


Le hago un rgbscale (Oscurecer a la mitad) al gráfico del ratón y en 16 funciona, pero en 32 no...


(He probado por curiosidad, a hacer el rgbscale en modo 32 bits pero con un gráfico en 16...modifica la imágen, pero de forma incorrecta, los colores salen como corruptos)

SplinterGU

pues a mi me funciona perfecto...

voy a probar con la version windows, pero la version linux va de perlas.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

en windows no funciona, voy a regenerar, quizas empaquete los binarios viejos... diablos!

edit: es correcto, empaquetado erroneo... diablos!
Download Lastest BennuGD Release: http://www.bennugd.org/node/2


SplinterGU

subiendo binarios correctos... habia armado el paquete con los binarios viejos... incluso creo que la version anterior tampoco era nueva, era anterior a la anterior...

ninguna de las release con crosscompiler salieron... :(

gracias momia, por avisar del fallo.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

La momia que fuma

Me alegro de haber ayudado  :)