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
» player não consegue andar
por lovn7 Qui 21 Nov 2024, 13:33

» É possível fazer istó no game maker
por William Lima Qui 21 Nov 2024, 10:56

» Rio Rise - novo launcher do Gta San Andreas SAMP Brasil
por Lua Sáb 16 Nov 2024, 20:22

» (Resolvido) Cenario longo x Texture Pages
por josuedemoraes Sáb 16 Nov 2024, 15:31

» Kids' band
por Adilson Lucindo Santos Sex 15 Nov 2024, 12:23

» (RESOLVIDO) Engasgos-Troca de Sprites/animações
por josuedemoraes Ter 12 Nov 2024, 01:49

» Block Room - DEMO
por Joton Qua 06 Nov 2024, 22:58

» Game Infinito vertical (subindo)
por macmilam Sáb 26 Out 2024, 12:36

» Retorno da GMBR!!!
por Dancity Ter 22 Out 2024, 16:36

» Máquina de estados
por aminaro Qui 10 Out 2024, 13:33

» como faço pra um objeto colidir com o outro e diminuir a vida do player ?
por josuedemoraes Qui 03 Out 2024, 16:51

» RESOLVIDO: Colisão com objetos moveis
por josuedemoraes Qua 02 Out 2024, 20:28

» Crypt of the Blood Moon
por divin sphere Qua 11 Set 2024, 18:18

» como fazer um objeto seguir?
por divin sphere Dom 18 Ago 2024, 18:08

» Procuro de alguém para Modelar/Texturizar/Animar objetos 3D
por un00brn Dom 11 Ago 2024, 11:10

» Destruição de cenário (estilo DD Tank)
por CoronelZeg Sex 09 Ago 2024, 17:16

» RESOLVIDO-Como destruir uma instancia especifica de um objeto
por josuedemoraes Ter 23 Jul 2024, 00:40

» Automatizar a coleta de id
por GabrielXavier Seg 22 Jul 2024, 18:01

» Preciso de ajuda para concluir um pequeno projeto
por lmoura Qui 27 Jun 2024, 15:45

» ANGULO ACOMPANHAR O OBJETO
por Klinton Rodrigues Qui 27 Jun 2024, 08:34

» Musica reinicia quando sala reinicia
por GabrielXavier Ter 18 Jun 2024, 07:28

» como fazer uma copia de gd
por generico_cube Sex 14 Jun 2024, 15:48

» Square Adventure
por guilherme551 Ter 11 Jun 2024, 09:54

» como posso definir limite de uma variavel
por GabrielXavier Sex 07 Jun 2024, 14:14

» [Resolvido] Dúvida, colisão única de objeto
por vdm842 Sex 24 maio 2024, 09:50


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