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.

dcarrigg
fonte
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.

jpaver
fonte
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).

LearnCocos2D
fonte
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.

Alex Jasmin
fonte
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.
wkerslake
fonte
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.

Dr. Snoopy
fonte