Gibt es eine Möglichkeit, Objekte in einem 2D-Spiel mit OpenGL zu verwischen, ohne Shader zu verwenden?

8

Gibt es in OpenGL eine gute Möglichkeit, Objekte ohne Verwendung von Shadern zu verwischen?

Derzeit erreiche ich eine Unschärfe, indem ich das Objekt leicht nach oben, unten, links, rechts und die vier Diagonalen aus seiner ursprünglichen Position rendere. Es scheint, dass es einen viel besseren Weg geben sollte, dies zu tun. Ich arbeite in einer 2D-Szene.

dcarrigg
quelle
Warum nicht Shader verwenden?
Jonathan Fischoff
1
@ Jonathan Mehrere Gründe, aber der größte könnte die Verwendung von OpenGL ES 1.1 (Just FF) sein.
Dr. Snoopy
ah, gotcha ya. :(
Jonathan Fischoff
Möchten Sie eine unscharfe Animation dieser Objekte erzielen ?
Alex Jasmin

Antworten:

6

Was Sie bereits haben, ist gut und der kanonische Weg, um Vollbildunschärfe zu erreichen.

Wenn Sie keine Vollbild-Unschärfe wünschen, aber 2D-Sprites pro Sprite verwischen möchten, können Sie mithilfe der Mipmap-LOD-Klemmung / Bias Ihre Hardware zwingen, einen niedrigeren Mip-Pegel abzutasten. In Verbindung mit der bilinearen Vergrößerungsfilterung sollte das natürliche Ergebnis unscharf aussehen.

Andernfalls können Sie eine separate Textur für das unscharfe Bild verwenden und einfach zwischen dieser und der unscharfen Textur wechseln. Wenn Sie glatte Übergänge wünschen, können Sie mit jeder Textur gleichzeitig 2 Sprites zeichnen und den Alpha-Wert für jeden der Sprites animieren. dh. Mit zunehmender Zeit geht Alpha für Sprite1 von 0..1 und Alpha für Sprite2 von 1..0.

jpaver
quelle
6

Ohne Shader wird das Versetzen der Bilder so versetzt wie möglich einem Unschärfeeffekt nahe kommen. Sie können auch einfach mit Transparenz über den vorherigen Framebuffer zeichnen, wenn Sie eine Unschärfe im Vollbildmodus erzielen möchten. Jeder Durchgang verdoppelt jedoch ungefähr die erforderliche Füllrate, um eine gute Framerate aufrechtzuerhalten.

Der nächste Schritt würde mindestens eine Rendertextur und Ihre eigene Logik zum Verarbeiten des Bildes (Software-Shader) oder die Verwendung eines echten Hardware-Shaders (iPhone 3GS und höher) umfassen.

LearnCocos2D
quelle
1

Dies führt möglicherweise nicht zu der gleichen Art von Unschärfeeffekt, aber wie wäre es, wenn Sie das Bild auf eine kleine Pixmap-Größe herunterabtasten und es mit linearer Interpolation auf dem Bildschirm zeichnen.

Alex Jasmin
quelle
1

Müssen die Objekte von klar zu verschwommen wechseln?

Level 1:

  • Die einfachste Lösung besteht darin, die Quellgrafiken vorab zu verwischen und sie direkt zu zeichnen.

Level 2:

  • Erstellen Sie eine Handvoll diskreter Unschärfeschritte und generieren Sie diese im Voraus. Führen Sie dann nach Bedarf Bildwechsel durch. Sie werden wahrscheinlich nicht so viele brauchen, um das Erscheinungsbild eines reibungslosen Übergangs zu erhalten.

Stufe 3:

  • Generieren Sie eine Reihe von diskreten vorgenerierten Unschärfeschritten und Alpha-Überblendungen zwischen den nächsten beiden Schritten, um die Übergänge zu glätten.
wkerslake
quelle
0

Ohne Shader ist das so ziemlich alles, was Sie tun können. Der Akkumulationspuffer bietet Ihnen möglicherweise mehr Leistung, um mehr Arbeit zu erledigen, wenn er auf Ihrer Plattform verfügbar ist.

Dr. Snoopy
quelle