GMBR
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.
Entrar

Esqueci-me da senha

Ú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

Ir para baixo

Problema geral de alpha Empty Problema geral de alpha

Mensagem por Rodrigo Santiago Ter 07 maio 2013, 19:13

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:

Problema geral de alpha Temp1u
imagem 2
Problema geral de alpha Temp2y
Resultado:

Problema geral de alpha Imagemsf

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
Rodrigo Santiago

Games Ranking : Nota B

Notas recebidas : C + C + B
Data de inscrição : 28/07/2012
Reputação : 73
Número de Mensagens : 1281
Prêmios : Problema geral de alpha Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 3 Prata x 1 Bronze x 3

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

Problema geral de alpha Empty Re: Problema geral de alpha

Mensagem por saim Ter 21 maio 2013, 16:38

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
Código:
draw_set_blend_mode_ext(bm_src_alpha, bm_inv_src_alpha);
Então você vai desenhar algo semi-transparente sobre uma superfície 100% opaca. Se fosse só 100% transparente ou só 100% opaca, não haveria necessidade de esquentar a cabeça, mas estamos falando em valores intermediários. Digamos, alpha=0.2.
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
saim

Games Ranking : Nota B

Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios : Problema geral de alpha Empty

Medalhas x 1 Tutoriais x 6 Moedas x 0

Ouro x 1 Prata x 0 Bronze x 3

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

Problema geral de alpha Empty Re: Problema geral de alpha

Mensagem por Kabeção Qua 22 maio 2013, 13:22

Eu também já tive problemas com isso e consegui a explicação na época.

Parece que o alpha está sendo medido 2 vezes, com o fundo e com a outra imagem
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)

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.
Kabeção
Kabeção

Games Ranking : Sem avaliações

Data de inscrição : 08/06/2008
Reputação : 100
Número de Mensagens : 2314
Prêmios : Problema geral de alpha Empty

Medalhas x 0 Tutoriais x 7 Moedas x 0

Ouro x 3 Prata x 0 Bronze x 1

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

http://blackcapapps.blogspot.com.br/

Ir para o topo Ir para baixo

Problema geral de alpha Empty Re: Problema geral de alpha

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Ir para o topo Ir para baixo

Ir para o topo

- Tópicos semelhantes

 
Permissões neste sub-fórum
Não podes responder a tópicos