locked
Sombras en 2D RRS feed

Respuestas

Todas las respuestas

  • Buenas Jesús,

     

    Preguntas por sombras en 2D y sin embargo en la imagen lo que parece que buscas es como crear esa imagen de luz que tenga en cuenta las colisiones.

    La verdad es que al no tener custom shaders cualquier solución será más costosa, de todas formas como lo necesitas para algo 2D creo que puedes conseguir una solución que vaya bien.

    Una forma por ejemplo sería parecida a los shadow volumens, deberías usar la trigonometría que conoces para extruir todos los elementos que corten la luz desde la posición de la luz, creando formas que salgan de la pantalla. Por ejemplo en la imagen que pones, podrías crear una forma con forma de trapacio que representaría el resultado de extruir esa rectangulo desde donde se encuentra la luz.

    Todas esas formas podrías almacenarlas en un rendertarget y usarlo de máscara para obtener la forma de la luz que debes aplicar a la escena.

     

    Creo que eso te podría servir, de todas formas si se me ocurre algo más eficiente te lo escribiré por aquí.

     


    Saludos


    MVP XNA/DirectX

    Blog

    XNACommunity

    viernes, 20 de mayo de 2011 20:51
    Moderador
  • Hola Javi,

     

    Muchas gracias por contestar tan rapido :-)

    Matemáticamente sufriré más o menos, pero creo que conseguiré aislar la zona que debe quedar debajo de la máscara. Pero la pregunta sería, cómo hago esa máscara con xna sin shaders? graciaas!


    Jesús Bosch Aiguadé
    MSP - MCPD
    www.plungeinteractive.com
    http://geeks.ms/blogs/jbosch
    Twitter: @jboschaiguade
    sábado, 21 de mayo de 2011 7:09
  • Buenas,

    Una forma de conseguir usar una máscara en WP7, que consistiría en dibujar una imagen de fondo y luego usar una imagen por ejemplo circular que muevas con el ratón y vaya iluminando o dejando ver que es lo que hay debajo.

    Sería usando el test de scissor de forma que seleccionas en que zona estáría tu imagen de máscara (ó luz) y defines un rectangulo en esa zona del buffer con el scissor y en esas coordenadas dibujas la escena y encima la imagen circular de luz.

    Una vez tengas eso, lo siguente sería aplicar el recorte que necesitas a tu imagen de luz, por ejemplo pintando encima los obtáculos extruidos de color negro.

     

    Espero haberme explicado, sino dimelo.


    Saludos


    MVP XNA/DirectX

    Blog

    XNACommunity

    sábado, 21 de mayo de 2011 8:39
    Moderador
  • Genial. Lo que dices tiene buena pinta.

     

    No se te ocurrirá donde puede haber algun ejemplo del scissor?

     

    Gracias de nuevo!


    Jesús Bosch Aiguadé
    MSP - MCPD
    www.plungeinteractive.com
    http://geeks.ms/blogs/jbosch
    Twitter: @jboschaiguade
    sábado, 21 de mayo de 2011 9:05
  • Esta tarde si saco un rato te subo un ejemplo a XNACommunity sobre el scissor test en WP7.

     

    Saludos


    MVP XNA/DirectX

    Blog

    XNACommunity

    sábado, 21 de mayo de 2011 11:52
    Moderador
  • estaría genial porque no he encontrado ningún ejemplo decente :-S

     

    gracias!


    Jesús Bosch Aiguadé
    MSP - MCPD
    www.plungeinteractive.com
    http://geeks.ms/blogs/jbosch
    Twitter: @jboschaiguade
    sábado, 21 de mayo de 2011 15:35
  • Buenas Jesús,

     

    He dejado subido a XNACommunity un ejemplo para Windows Phone 7 sobre como usar el scissor test, espero te sirva de ayuda.

    http://xnacommunity.codeplex.com/wikipage?title=ScissorTest

     

    Saludos


    MVP XNA/DirectX

    Blog

    XNACommunity

    • Marcado como respuesta Jesús Bosch domingo, 22 de mayo de 2011 6:48
    sábado, 21 de mayo de 2011 22:03
    Moderador
  • mmm un apunte. Veo que el scissors este se basa en un rectángulo. Si necesito hacer formas geométricas más complejas es posible hacerlo?
    Jesús Bosch Aiguadé
    MSP - MCPD
    www.plungeinteractive.com
    http://geeks.ms/blogs/jbosch
    Twitter: @jboschaiguade
    domingo, 22 de mayo de 2011 7:38
  • No, solo se puede usar un rectangulo, simplemente haz lo mismo que he hecho en ese ejemplo, en el que para pintar un circulo he usado el rectángulo que envuelve a dicha circunsferencia (como el boundingbox en 3D), y luego pinta tu forma dentro.

    Ayer estuve pensando que si querías pintar un foco podrías pintar tu foco que es un objecto convexo, y detectar las colisiones de esta forma contra los obtáculos de tu escena 2D usando el test de colisiones de los convexos basados en recorrer cada arista del poligono y calcular su producto vectorial, el test será positivo o negativo dependiendo de la orientación del eje Z.

    Una vez hayas obtenido de manera eficiente los elementos contra los que ha colisionado ya solo tendrías que extruirlos con respecto a la luz. Esto lo tendrás que hacer creando la nueva forma con vertices y aristas que forme tu nueva forma y la cual tintes de negro.

     

    Saludos


    MVP XNA/DirectX

    Blog

    XNACommunity

    domingo, 22 de mayo de 2011 8:03
    Moderador