Cómo consigo este efecto? please

Started by Kalas, June 01, 2019, 04:40:51 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Kalas

Hola a todos los de esta genial comunidad hace tiempos que no posteaba nada (que solo preguntar soy  ;D jaja) gracias por ayudarme siempre, ahora la razón por la que vengo ahora a preguntar por ayuda es sobre un efecto 2d que me gustaría experimentar, específicamente sería de los primeros 6 segundos de este video:

https://www.youtube.com/watch?v=aaAJKUKLqyM  me refiero al efecto de vidrio que se rompe al hacer contacto con el enemigo, pongo el video porque es más entendible a poner imágenes.

las preguntas serían: es posible replicarlo en 2d?  también si es posible tener control sobre las fisuras (ya que me interesa guiar la dirección de las fisuras) o de elegir que pedazos de vidrio va a caer (ya que no me interesa romper todo el vidrio aunque al final si)? , me gustaría saber si alguien tiene alguna idea sobre esto, gracias como siempre! y pues solo tengo que decir que no soy experto todavía, feliz día

pd: agrego una imagen de susodicho efecto aunque preferíria que vean el video 

JaViS

No es facil. los cracks en la imagen se podrian hacer con una capa transparente en modo 32 bits, para poder tener diferentes grados de transparencia sobre la imagen. O hacerlo usando el flag aditivo (flags=16) para lograr un efecto similar.

lo dificil está en distorsionar la imagen original para que se vea como en el video. Esa parte si no se me ocurre como hacerla.
Working on Anarkade. A couch multiplayer 2D shooter.

Arcontus

Poderse se puede hacer, ahora la faena para hacerlo es épica :)

Te voy a explicar como lo enfocaría yo:
1: Crea un mapa de blancos y negros donde esté representada la "rejilla" de trozos de cristal.
2: Crea un proceso que recorra esa rejilla a la vez que recorre el mapa que deseas trocear. Cuando encuentres negro te copias el color, cuando encuentres blanco dibujas el color delimitador que pongas de limite. Esto te ha de dar como resultado la imagen original troceada a negro (o al color delimitador que pongas).
3: Ahora toca hacer una funcion que recorra esa imagen y sea capaz de extraer las areas cerradas (delimitadas con tu color), como un nuevo MAP. Te los guardas todos  por ejemplo en una lista enlazada.
4: Creas un proceso por cada MAP generado y los animas. (Esta es la parte sencilla).

Efectos de hielo: En el paso 3 puedes aplicar un proceso que lea los delimitadores y actue en consecuencia, por ejemplo, aclarando las zonas cercanas. Simplemente leyendo el color y sumando (1,1,1) y validando que no superen el 255 en ninguno de los parametros conseguirias aclarar esa zona. Si subes más los valores, más se aclarará. A partir de ahí puedes trabajarlo todo lo que quieras. Lo que no se si hay filtros que lo hagan automáticamente, quizás si, lo desconozco, pero a mano se puede hacer algo interesante.

En definitiva lo que has de lograr es un algoritmo que trocee una imagen de manera iregular y cree con cada objeto un nuevo proceso con ese grafico. Espero haber servido para darte un enfoque en como hacerlo, pero no es fácil y son cientos de lineas hacer eso que buscas.

Un saludo!
5Leaps, el primer juego comercial desarrollado para BennuGD. http://www.5leaps.com

FreeYourMind

Igual, igual nunca te va quedar pues ese efecto es creado en 3d, seguramente usando opengl, los cristales una vez rotos son poligonales, y despues tiene efectos de luz y blur mezclados, pero como bien te dicen, puedes simular en 2d el romper el cristal usando regiones clonadas y despues con transparencias, rotacion y zoom hacerlos desaparecer

Kalas

gracias a todos por su respuesta, por el momento seguiré intentando, ya me han dado más ideas de como lograrlo gracias

Drumpi

Sólo quiero hacer valer el hecho de que los trozos marcados con el gráfico de la rotura de cristal, y los trozos rotos después no coinciden :D
Pero es como dice Arcontus: saca una captura de la pantalla antes de superponer la imagen de cristal roto, divide la imagen en varios trozos/procesos, y luego lánzalos con distinta fuerza, rotación (y si te pones exquisito, haces que se cambie el size_x o size_y con distinta velocidad, usando funciones sinusoidales, para dar la sensación de rotación) aplicándole una fórmula de gravedad.

La parte más complicada es dividir la imagen en distintos trozos.

Se me ocurre una cosa: usar un mapa de durezas, donde cada color es un trozo diferente, así que sólo tienes que recorrer el mapa de durezas, y cada pixel de la captura lo asignas al mapa del color que corresponda. Eso sí, recuerda que los nuevos mapas luego tendrás que ajustar su tamaño, eliminando las columnas y filas vacías a la derecha y abajo, si es que no lo has hecho en la creación.
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)

Kalas

gracias Drumpi, ya voy poco a poco armando la idea de cómo hacerlo

Drumpi

Me alegro, aunque hayas tardado un año en ello :D
Just joking! Aquí tardar añosen hacer un proyecto es la norma... salvo para mierdecillas para concursos :D
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)