2017-06-04 5 views
0

Wie erstellt man einen Gaußschen Unschärfeeffekt ohne irgendwelche Shader? Ich habe viele Shader-Tutorials ausprobiert, aber ich habe es nie zum Laufen gebracht. Ich habe diesen Link auch ausprobiert. https://github.com/mattdesl/lwjgl-basics/wiki/OpenGL-ES-Blurs Aber ich konnte den Bildschirm nicht in eine Pixmap umgewandelt werden. Kannst du mir in die richtige Richtung zeigen, wohin ich gehe, um die richtige Antwort zu bekommen?Wie man einen Gaußschen Unschärfeeffekt in libGDX ohne Shader erzeugt

Vielen Dank im Voraus!

+0

Wenn Sie Echtzeit-Unschärfe benötigen, müssen Sie mit Shadern arbeiten. Wenn Geschwindigkeit keine Rolle spielt, könnten Sie eine Pixmap falten, aber es gibt keine eingebaute Möglichkeit. Sie müssten den ByteBuffer der Pixel durchlaufen, um ihn zu falten. – Tenfour04

Antwort

0

Um Unschärfe ohne Shader zu zeichnen, müssten Sie die ursprüngliche Szene zu einer Textur zeichnen. Dann zeichne diese Textur NxN mal auf deinen Hauptpuffer mit etwas Überblendung. Alpha muss dem Faktor entsprechen, der vom Offset in der NxN-Matrix abhängt. Genau so pseudo:

for(int heightDiff=-N; heightDiff<=N; heightDiff++) { 
    for(int widthDiff=-N; widthDiff<=N; widthDiff++) { 
     float alpha = 1.0/max(width, height); // Not a correct equation 
     glColor(1.0, 1.0, 1.0, alpha): 
     drawFullscreenWithOffset(widthDiff, heightDiff); 
    } 
} 

Es könnte eine Optimierung sein, um vertikale und horizontale Unschärfe zu trennen. Das würde bedeuten, dass Sie einen von ihnen auswählen und ihn auf eine neue Textur zeichnen müssen, um dann den anderen Weichzeichner im Hauptpuffer zu zeichnen. Sie erhalten eine zusätzliche Textur, aber Sie reduzieren NxN zieht auf 2 * N.

Verwandte Themen