fontes, texto, blending e um efeito legal.

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Resolvido fontes, texto, blending e um efeito legal.

Mensagem por saim em Qui 07 Jul 2011, 15:17

Oi, moçada.
Estive lendo esse tópico do gifah e cismei de tentar fazer alguma coisa eu mesmo. Aí, no meio do caminho, a dúvida foi resolvida e eu fiquei com minha meia-engine pra brincar.
Então, até a coisa ser resolvida, eu estava num teste de como eliminar só uma área da surface, fazendo um buraco no lugar certo. Fiz, funcionou, beleza. Comecei a brincar com os blend modes. Queria desenhar um texto que sempre fosse visível, não importa o fundo sobre o qual ele está. Ou seja, um texto que sempre estivesse da cor oposta à cor do fundo.
Ora, eu escrevi postei um tutorial sobre blending! Claro que eu sou capaz disso! Então vamos lá:
1 - muda o blend mode pra desenhar da cor inversa do fundo
2 - desenha o texto
3 - volta o blend mode ao normal
4 - corre pro abraço
Certo? Não. Primeiro, porque os blend modes são fatores multiplicativos, então se eu desenhar o texto em preto (tudo é zero), o texto sairá em preto (porque 0*0=0). Contornei isso desenhando em branco (tudo é 1, e 1*uma_coisa_qualquer=uma_coisa_qualquer).

Show, né? Olha como ficou o código:
Código:
draw_set_blend_mode_ext(bm_inv_dest_color, bm_zero); //muda o blend mode
draw_text_color(view_xview[0]+20, view_yview[0]+20, "teste jasdflfkasdj", $ffffff, $ffffff, $ffffff, $ffffff, 1); //desenha um texto em branco
draw_set_blend_mode(bm_normal); //volta o blend mode ao normal
Testem aí e me digam se funcionou. Porque, na minha máquina, não funcionou. As cores ficaram perfeitamente dentro do esperado, mas o texto se transformou num monte de retângulos.
Se eu elimino os blend modes, o texto aparece lá, em branco, bonitão. Então o que está errado?

PS: Consegui o efeito desejado colocando o texto numa surface e mudando o blend mode pra (bm_inv_dest_color, bm_inv_src_alpha), mas continuo com a dúvida: porque isso não funciona no caso de tentar desenhar o texto diretamente? Acho que cada letra está num retângulo com fundo transparente, mas e aí?


Última edição por saim em Qui 07 Jul 2011, 17:21, editado 1 vez(es)

saim

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

Resolvido Re: fontes, texto, blending e um efeito legal.

Mensagem por MatheusReis em Qui 07 Jul 2011, 15:37

Aparentemente, quando mudamos a cor de um texto "tingimos" ele com a cor, inclusive as áreas transparentes. Aí quando vamos usar o blend mode o GM parece ignorar as partes transparente, considerando tudo branco com alpha 1, logo toda a área da fonte (o retângulo) é usada para inverter. Eu esbarrei com esse erro enquanto fazia o Math2011. O "Saúde: HP/MAXHP" iria usar a inversão de cores, mas por causa desse erro e por causa do mal-funcionamento de surfaces em certos PCs, resolvi fazer um texto com outline mesmo.
Essa é a minha teoria.

**EDIT**
DESCOBRI!!! Essa combinação de blendmodes ignora o alpha do que vai ser desenhado.
Antes do draw_text, experimente usar draw_text_color(view_xview[0]+20, view_yview[0]+20, "teste jasdflfkasdj", $ffffff, $ffffff, $ffffff, $ffffff, 0);(Valor do alpha no 0)
A inversão continuará, pois a área foi toda tingida de branco, com ou sem alpha. Há!!! sorrindo2

MatheusReis

Ranking : Nota A
Número de Mensagens : 1087
Idade : 23
Data de inscrição : 13/01/2010
Notas recebidas : B-A-A
Reputação : 30
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 2
   : 1
   : 0

http://www.mathaeuz.deviantart.com

Voltar ao Topo Ir em baixo

Resolvido Re: fontes, texto, blending e um efeito legal.

Mensagem por saim em Qui 07 Jul 2011, 16:09

Hm... mais ou menos...
Veja bem, eu postei uma segunda combinação pra surface que não ignora o alpha (senão, ficava tudo preto, no fundo branco, como estava acontecendo com a primeira combinação). Claro que testei essa segunda pro texto também. O resultado foi interessante num fundo branco, mas as partes transparentes ficaram brancas em qualquer fundo.
Mudar o alpha pra zero só vai fazer tudo ser transparente, o que DEVERIA resultar em nada na segunda combinação de blending, mas ainda desenha os retângulos brancos em qualquer fundo.

saim

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

Resolvido Re: fontes, texto, blending e um efeito legal.

Mensagem por MatheusReis em Qui 07 Jul 2011, 16:54

Testei a segunda combinação. Com ela o alpha define o quanto da inversão será misturado com o branco.

ex: O texto é todo branco.
Temos uma parte de alpha 0 (invisivel) e uma com alpha 1, que delinea o texto.
A area com alpha 0 é desenhada branca, independentemente do fundo, já a area com alpha 1 inverte a cor.
Mudei o alpha 0.5 . Agora o texto é desenhado em alpha 0.5.
A coloração do texto virou uma mistura do branco com a cor invertida.
Logo: Quanto mais próximo de 1 o alpha do desenho, mais pura a inversão. Quanto mais proximo de 0, mais "misturado" com branco fica a inversão.
Veja se consegue o mesmo resultado.

(Meu primeiro post se referia à primeira combinação de blendmodes silent)

EDIT

Esqueci de concluir porque funciona com as surfaces.
Quando a gente desenha o texto normalmente na surface, a área do texto com alpha 0 não é desenhada (duh), preservando a cor e o alpha do fundo. Geralmente usamos draw_clear_alpha(0,0), transformando o fundo em preto com alpha 0. A combinação de preto com alpha zero não é desenhada pela 2ª combinação (ainda não testei por que), dando o resultado desejado(inversão só no texto).

MatheusReis

Ranking : Nota A
Número de Mensagens : 1087
Idade : 23
Data de inscrição : 13/01/2010
Notas recebidas : B-A-A
Reputação : 30
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 2
   : 1
   : 0

http://www.mathaeuz.deviantart.com

Voltar ao Topo Ir em baixo

Resolvido Re: fontes, texto, blending e um efeito legal.

Mensagem por saim em Qui 07 Jul 2011, 17:20

Sem querer, você matou a charada!
Ao limpar a surface usando draw_clear_alpha($000000, 0), o fundo é PRETO transparente.
Usar um fundo BRANCO transparente - draw_clear_alpha($ffffff, 0), o erro é o mesmo que desenhar o texto diretamente.
Decerto, o fundo transparente da fonte é branco, também.
Nunca imaginaria que algo assim, tão invisível, influenciasse nas cores...

Tópico resolvido!

Edit: usei o "sem querer" porque você ainda não tinha testado o porque de um modo funcionar e o outro não. Se já tinha sido resolvido e eu que não tinha entendido, me desculpe.

saim

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

Resolvido Re: fontes, texto, blending e um efeito legal.

Mensagem por Conteúdo patrocinado Hoje à(s) 11:43


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum