Entrar
Últimos assuntos
» Servidor de Discord do fórum?por Super Games Sáb 18 maio 2024, 01:27
» Problemas com a caixa de diálogo, ela é pequena e as letras não cabem dentro
por Rukasu777 Qui 16 maio 2024, 18:10
» Problemas com particulas
por RastaMaan Dom 12 maio 2024, 17:03
» Problema ao entrar por uma porta e voltar por ela
por aminaro Seg 06 maio 2024, 10:08
» Alguém aqui já ganha dinheiro com seus games?
por theguitarmester Ter 30 Abr 2024, 11:43
» Colisões não funcionando
por theguitarmester Ter 30 Abr 2024, 10:16
» Como ajustar velocidade de cada frame da animação no game maker
por pequetux Sex 26 Abr 2024, 16:45
» Preciso de ajuda
por AftonDuGrau Dom 21 Abr 2024, 20:18
» Como faz o evento drawn GUI, não se repetir?
por aminaro Sex 19 Abr 2024, 20:30
» PROBLEMAS COM FÍSICAS DE ÁGUA
por aminaro Ter 16 Abr 2024, 10:07
» Retorno da GMBR!!!
por Ralphed Sex 12 Abr 2024, 22:45
» JOGADOR PARANDO NO AR QUANDO ATACA
por aminaro Qua 10 Abr 2024, 13:51
» Problemas com texto interativo
por Kaaru72 Dom 07 Abr 2024, 11:31
» Erro escondido e indecifrável
por dev_gabize.azv Qui 04 Abr 2024, 10:11
» Mudar cor de apenas uma palavra
por Ralphed Sáb 30 Mar 2024, 00:39
» Procuro Programador de game maker
por Wou Sex 15 Mar 2024, 10:27
» Mod APK
por gamerainha Qua 13 Mar 2024, 06:30
» Aceito pedidos de sprites (Com exemplos meus)
por Sevilha Qua 28 Fev 2024, 12:17
» Inventário simples
por Isquilo_Roedor Qui 22 Fev 2024, 15:18
» Problemas na programaçnao de inimigo [jogo DOOM LIKE]
por Black Mirror Dom 11 Fev 2024, 13:34
» ANDROID MULTI TOUCH
por DiegoBr Dom 04 Fev 2024, 12:13
» Save e Load Json
por Klinton Rodrigues Qui 25 Jan 2024, 11:12
» Colisão com mais de um objeto
por aminaro Seg 22 Jan 2024, 15:02
» Oi sou novo aqui
por Thiago Silveira Alexandre Sáb 20 Jan 2024, 20:55
» Como acessar conteudo comprado no marketplace
por macmilam Sex 19 Jan 2024, 07:42
Problema geral de alpha
3 participantes
Página 1 de 1
Problema geral de alpha
Olha só:
Tenho uma sprite com alpha em algumas partes semi transparente,e uma outra sprite 100% opaca.
Eu desenho a opaca, DEPOIS, desenho ,por cima, a que possui transparencia. E crio uma sprite da tela. Salvo ela como strip. E nas partes em que havia semi transparencia , em vez de esta parte ser transparente com a outra sprite, ela é transparente com a cor de background!
Olha só:
imagem 1:
imagem 2
Resultado:
A cor do BG é cinza, padrão mesmo.
E veja .
Parece que o alpha está sendo medido 2 vezes, com o fundo e com a outra imagem, o que não devia acontecer. Pois a outra imagem é 100% opaca! E é desenhada primeiro!
SEGUNDO ERRO:
Se eu tiver uma imagem com semi transparencia, desenhar essa sprite numa surface, e criar uma sprite da surface, desenhar esta nova imagem na surface, e recriar a sprite da surface TODO alpha <1 é dividido por 2.
Tenho uma sprite com alpha em algumas partes semi transparente,e uma outra sprite 100% opaca.
Eu desenho a opaca, DEPOIS, desenho ,por cima, a que possui transparencia. E crio uma sprite da tela. Salvo ela como strip. E nas partes em que havia semi transparencia , em vez de esta parte ser transparente com a outra sprite, ela é transparente com a cor de background!
Olha só:
imagem 1:
imagem 2
Resultado:
A cor do BG é cinza, padrão mesmo.
E veja .
Parece que o alpha está sendo medido 2 vezes, com o fundo e com a outra imagem, o que não devia acontecer. Pois a outra imagem é 100% opaca! E é desenhada primeiro!
SEGUNDO ERRO:
Se eu tiver uma imagem com semi transparencia, desenhar essa sprite numa surface, e criar uma sprite da surface, desenhar esta nova imagem na surface, e recriar a sprite da surface TODO alpha <1 é dividido por 2.
Rodrigo Santiago- Games Ranking :
Notas recebidas : C + C + B
Data de inscrição : 28/07/2012
Reputação : 73
Número de Mensagens : 1281
Prêmios :
x 0 x 0 x 0
x 3 x 1 x 3
x 0 x 0 x 0
Re: Problema geral de alpha
Isso acontece, mesmo. É por causa do blend mode. Até hoje eu tenho dificuldade pra aceitar isso, também.
Se você der uma olhada no tutorial a respeito de blend modes, vai ver que o bm_normal (default) equivale a
Vamos nos preocupar apenas com o canal alpha (vou considerar que a cor é irrelevante).
Por "fonte" vamos entender "a sprite semi-transparente (alpha = 0.2) que estamos desenhando agora" e por "destino", vamos entender "a sprite totalmente opaca (alpha = 1.0) sobre a qual estamos desenhando.
Bom, como o tutorial diz, devemos multiplicar o alpha da fonte pelo próprio alpha da fonte (bm_src_alpha) e o alpha do destino pelo inverso do alpha da fonte (bm_inv_src_alpha). Depois somar os resultados.
Deixa eu puxar uma calculadora aqui...
0.2 * 0.2 + 1 * 0.8 =
0.04 + 0.8 = 0.84
Bizarro, né? Já comentei que até hoje tenho dificuldade em aceitar isso?
Eu li num tutorial, do brendan, um truque pra fugir disso (se você realmente só quiser exportar a sprite). Você pega sua sprite com alpha duvidoso e mistura com um fundo totalmente preto e opaco, usando bm_add. O resultado é que você vai manter as cores originais (já que vai estar somando com preto, ou seja, zero) e o alpha será a soma das duas alphas, o que certamente vai ser maior ou igual a 1 (se o resultado for maior, o programa ignora o excesso).
Fazer isso em tempo real pode ser meio chato e, provavelmente, inutil. Mas pra montar uma imagem que vai ser usada com mais frequencia que alguns frames, pode valer a pena.
[edit] fui reler o tutorial e - olha só - esse caso está previsto! Era esperado isso, mesmo.
Se você der uma olhada no tutorial a respeito de blend modes, vai ver que o bm_normal (default) equivale a
- Código:
draw_set_blend_mode_ext(bm_src_alpha, bm_inv_src_alpha);
Vamos nos preocupar apenas com o canal alpha (vou considerar que a cor é irrelevante).
Por "fonte" vamos entender "a sprite semi-transparente (alpha = 0.2) que estamos desenhando agora" e por "destino", vamos entender "a sprite totalmente opaca (alpha = 1.0) sobre a qual estamos desenhando.
Bom, como o tutorial diz, devemos multiplicar o alpha da fonte pelo próprio alpha da fonte (bm_src_alpha) e o alpha do destino pelo inverso do alpha da fonte (bm_inv_src_alpha). Depois somar os resultados.
Deixa eu puxar uma calculadora aqui...
0.2 * 0.2 + 1 * 0.8 =
0.04 + 0.8 = 0.84
Bizarro, né? Já comentei que até hoje tenho dificuldade em aceitar isso?
Eu li num tutorial, do brendan, um truque pra fugir disso (se você realmente só quiser exportar a sprite). Você pega sua sprite com alpha duvidoso e mistura com um fundo totalmente preto e opaco, usando bm_add. O resultado é que você vai manter as cores originais (já que vai estar somando com preto, ou seja, zero) e o alpha será a soma das duas alphas, o que certamente vai ser maior ou igual a 1 (se o resultado for maior, o programa ignora o excesso).
Fazer isso em tempo real pode ser meio chato e, provavelmente, inutil. Mas pra montar uma imagem que vai ser usada com mais frequencia que alguns frames, pode valer a pena.
[edit] fui reler o tutorial e - olha só - esse caso está previsto! Era esperado isso, mesmo.
saim- Games Ranking :
Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios :
x 1 x 6 x 0
x 1 x 0 x 3
x 0 x 0 x 0
Re: Problema geral de alpha
Eu também já tive problemas com isso e consegui a explicação na época.
Quando você desenha isso encima de outra imagem a cor com máxima intensidade sera aplicada a proxima causando esses problemas, por isso os pixeis transparentes continuam na cor do background.
Agora em uma imagem com premultiplied alpha o RGB é multiplicado pelo alpha, assim o RGBA do mesmo vermelho com 50% de transparência seria: (0.5,0,0,0.5).
O vermelho não esta mais com máxima intensidade seguido do alpha, agora já é a cor final e a renderização pode processar de maneira correta a sobreposição das imagens.
Isso acontece porque as cores dos pixels da imagem com transparência não estão multiplicadas pelo seu alpha (non-premultiplied alpha), ou seja, o RGBA é a cor com máxima intensidade seguida do valor do alpha, então um vermelho com 50% de transparência seria: (1,0,0,0.5)Parece que o alpha está sendo medido 2 vezes, com o fundo e com a outra imagem
Quando você desenha isso encima de outra imagem a cor com máxima intensidade sera aplicada a proxima causando esses problemas, por isso os pixeis transparentes continuam na cor do background.
Agora em uma imagem com premultiplied alpha o RGB é multiplicado pelo alpha, assim o RGBA do mesmo vermelho com 50% de transparência seria: (0.5,0,0,0.5).
O vermelho não esta mais com máxima intensidade seguido do alpha, agora já é a cor final e a renderização pode processar de maneira correta a sobreposição das imagens.
Tópicos semelhantes
» Problema com alpha no GM8. sprite_set_alpha_from_sprite tem bug???
» Dúvidas em Geral
» [dica][geral] facilidades gm 4.3
» [Discussão] Game Design em Geral
» [Resolvido]Dúvidas em geral! Dll, mmorpg
» Dúvidas em Geral
» [dica][geral] facilidades gm 4.3
» [Discussão] Game Design em Geral
» [Resolvido]Dúvidas em geral! Dll, mmorpg
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos
|
|