Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: fab62 en Febrero 27, 2015, 03:25:49 PM

Título: Problema con surfaces: cortar imagen
Publicado por: fab62 en Febrero 27, 2015, 03:25:49 PM
hola makeros! hoy se me ha pasado un problema que me ha hecho quedarme de manos cruzadas jaja.. bueno, yo se que alguno de ustedes sabra:

El problema surge a traves del manejo de surfaces, lo que quiero es cortar una imagen particular de la siguiente manera
(http://www.comunidadgm.org/preguntas-y-respuestas/problema-con-surfaces-cortar-imagen/?action=dlattach;attach=14263;image)

Lo que tengo hasta ahora es hasta la imagen 3, pero no se como llegar a la 4


        // vemos si la superficie existe, si no la volvemos a crear
        if (!surface_exists(surface)) surface = surface_create(radio*2,radio*2);
       
        // iniciamos la edicion del surface
        surface_set_target(surface)
            draw_clear_alpha(0,0);
            draw_circle_colour(radio,radio,radio,c_white,c_white,0);
            draw_set_blend_mode_ext(bm_dest_color,bm_zero);
                draw_sprite(sprite, 0, 0, 0)
            draw_set_blend_mode(bm_normal);
        surface_reset_target()


Otra cosa, la imagen 3 no se ve asi, se ve de esta manera:
(http://www.comunidadgm.org/index.php?action=dlattach;topic=23725.0;attach=14265;image)

de antemano muchas gracias, cualquier ayuda les agradecere mucho :)
si alguien me explica mejor acerca de los surfaces y los canales alpha seria mejor, o una pagina en donde se entienda realmente como funciona :P
Título: Re:Problema con surfaces: cortar imagen
Publicado por: penumbra en Febrero 27, 2015, 08:23:48 PM
Si ya tienes la tercera imagen, lo que falta es mostrar esa surface, pero "quitándole" lo blanco. Hasta donde entiendo, para hacerlo tienes dos opciones.

1) La fácil: usar un modo blending adecuado en el evento DRAW, para dibujar la surface sin que se vea lo blanco.

2) La difícil: usar un shader para detectar un rango/tonalidad en específico y remover esos pixeles (borrar los pixeles blancos).

Aquí se explican los blending mode
https://www.yoyogames.com/tech_blog/68 (https://www.yoyogames.com/tech_blog/68)
https://www.yoyogames.com/tech_blog/69 (https://www.yoyogames.com/tech_blog/69)

Este ejemplo te puede resultar útil
http://gmc.yoyogames.com/index.php?showtopic=512187 (http://gmc.yoyogames.com/index.php?showtopic=512187)
Título: Re:Problema con surfaces: cortar imagen
Publicado por: Clamud en Febrero 28, 2015, 08:15:52 PM
Tengo la sensación de que esto es un bug o depende de la versión de :GMS:. Yo tengo la versión 1.3 y usé exactamente el mismo código, el resultado es diferente, la parte blanca aparece en los bordes de la máscara de colisión del sprite rojo, y no en medio como en tu caso, al modificar la máscara de colisión el resultado no cambia.

La solución que encontré es dibujar los elementos en el orden inverso; primero el sprite rojo y luego la máscara de recorte, y en vez de usar "draw_circle_color" usé un sprite con forma circular, si no tampoco funciona.

Hice otras pruebas y si quieres usar texturas o máscaras con "anti-alias" (suavizadas) es mejor usar draw_set_blend_mode_ext( bm_one, bm_zero );, en vez de draw_clear_alpha(0,0);. Las pruebas están en el ejemplo adjunto.

En :GM8: el código funciona sin problemas.