Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: DarkKRuleR en Octubre 27, 2019, 10:14:43 PM

Título: Al dibujar una surface, los alphas no funcionan bien
Publicado por: DarkKRuleR en Octubre 27, 2019, 10:14:43 PM
¡Buenas! Veréis... una imagen lo explicará (!)

(https://i.gyazo.com/b3bb299e5ec47b2cc2f9ba8d0f050071.png)

yo tengo un cuadrado rojo OPACO y una wea semitransparente. Entonces, en una surface, yo dibujo el cuadrado y ENCIMA dibujo la wea. Por algún motivo, al dibujar la surface obteniendo su textura y dibujándola en el mundo (con primitiva 3D, no sé si influya), esa transparencia de la wea parece que "atraviesa" el cuadrado, y puedo ver lo que hay detrás del cuadrado rojo, aún si éste debería ser opaco.

No tengo ningún draw_set_blend_mode así que no sé por qué pueda ocurrir. ¿Alguna idea?
Título: Re:Al dibujar una surface, los alphas no funcionan bien
Publicado por: Black_Cat en Octubre 28, 2019, 03:58:04 PM
Ni idea, pero deberías probar hacer lo mismo en 2D para saber si es que las funciones en 3D son las que estan causando ese efecto raro.

No se si estas usando primitivas, pero podes probar usando:
draw_vertex_texture_colour(x, y, xtex, ytex, col, alpha)

con el alfa a 1.
Título: Re:Al dibujar una surface, los alphas no funcionan bien
Publicado por: Void en Octubre 30, 2019, 01:58:40 AM
Ese es el comportamiento normal de las surfaces, para arreglarlo desactiva el canal alpha con draw_set_colour_write_enable cuando vayas a dibujar sprites con transparencia, o si necesitas partes de la surface que no sean completamente opacas ni completamente transparentes premultiplica el alpha del sprite y dibuja usando el blend mode extendido con bm_one como origen y bm_inv_src_alpha como destino.
Título: Re:Al dibujar una surface, los alphas no funcionan bien
Publicado por: Jucarave en Diciembre 23, 2019, 11:12:35 PM
En que orden estas dibujando las cosas? debes primero dibujar todas las cosas opacas y luego todas las transparentes en orden de la mas lejana a la cámara a la mas cercana.