Existe uma maneira de desfocar objetos em um jogo 2D com OpenGL sem usar shaders?


8

Existe uma boa maneira no OpenGL de desfocar objetos sem usar shaders?

Atualmente, estou realizando o desfoque, renderizando o objeto levemente para cima, baixo, esquerda, direita e as quatro diagonais de sua posição original. Parece que deveria haver uma maneira muito melhor de fazer isso. Estou trabalhando em uma cena 2D.


Por que não usar shaders?
— Jonathan Fischoff

11
@ Jonathan Vários motivos, mas o maior pode estar usando o OpenGL ES 1.1 (Just FF).
— Dr. Snoopy

ah, te peguei. :(
— Jonathan Fischoff

Deseja obter animação borrada desses objetos?
— Alex Jasmin

Respostas:


6

O que você já tem é bom e a maneira canônica de obter o desfoque em tela cheia.

Se você não deseja borrar a tela cheia, mas deseja borrar sprites 2D em uma base por sprite, pode usar a fixação / polarização do mipmap LOD para forçar seu hardware a obter um nível mip mais baixo. Utilizado em conjunto com a filtragem de ampliação bilinear, o resultado natural deve parecer desfocado.

Caso contrário, você pode usar uma textura separada para a imagem borrada e apenas alternar entre ela e a textura não desfocada. Se você deseja transições suaves, pode desenhar 2 sprites com cada textura simultaneamente e animar o valor alfa de cada um dos sprites. ie À medida que o tempo aumenta, alfa para sprite1 passa de 0..1 e alfa para sprite2 passa de 1..0.


6

Sem usar Shaders, a renderização das imagens é o mais próximo possível do efeito de desfoque. Você também pode desenhar o buffer de quadros anterior com transparência se desejar obter o desfoque em tela cheia. No entanto, cada passagem duplica aproximadamente a taxa de preenchimento necessária para manter uma boa taxa de quadros.

A próxima etapa envolveria pelo menos uma Rendertexture e sua própria lógica para processar a imagem (shader de software) ou usar um shader de hardware real (iPhone 3GS e superior).


1

Isso pode não resultar no mesmo tipo de efeito de desfoque, mas que tal reduzir a amostra para um tamanho de pixmap pequeno e desenhá-lo na tela com interpolação linear.


1

Os objetos precisam fazer a transição de claro para embaçado?

Nível 1:

  • A solução mais simples é pré-desfocar a arte de origem e desenhá-la diretamente.

Nível 2:

  • Crie várias etapas discretas de desfoque e gere essas antecipadamente, depois faça trocas de imagens conforme necessário. Você provavelmente não precisará de muitos para ter a aparência de uma transição suave.

Nível 3:

  • Gere uma série de etapas discretas de desfoque pré-geradas e mistura alfa entre as duas etapas mais próximas para suavizar as transições.

0

Sem shaders, é praticamente tudo o que você pode fazer. O buffer de acumulação pode fornecer mais poder para realizar mais tarefas, se estiver disponível em sua plataforma.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.