Bilder und Maske in OpenGL ES 2.0

8

Ich lerne OpenGL ES 2.0 und möchte eine App erstellen, um besser zu verstehen, wie es funktioniert. Die App hat eine Reihe von Filtern, die der Benutzer auf Bilder anwenden kann (ich weiß, nichts neues: P).

Einer dieser Filter nimmt zwei Bilder und eine Maske und mischt die zwei Bilder, die sie durch die Maske zeigen (hier ein Bild, um besser zu erklären, was ich erhalten möchte)

Im Moment bin ich wirklich verwirrt und ich weiß nicht, wo ich anfangen soll, diesen Effekt zu erzeugen. Ich kann nicht verstehen, ob ich mit mehreren Texturen und mehreren FrameBuffern arbeiten muss oder einfach mit einem einzelnen Shader arbeiten kann.

Haben Sie einen Hinweis, mir bei diesem Projekt zu helfen?

BEARBEITEN --------

Ich habe diese Lösung gefunden, aber wenn ich als Maskenlinien anstelle von Kreisen verwende, ist das Ergebnis wirklich "grungy", besonders wenn Linien gedreht werden.

%Vor%

Ist es wahrscheinlich besser Stencil Buffer oder Blending zu verwenden?

    
MatterGoal 31.08.2013, 16:24
quelle

2 Antworten

12

Sie können die Maske in einer Zeile anwenden, ohne die kostspielige if :

zu verwenden %Vor%

Oder besser interpolieren Sie einfach zwischen zwei Farben:

%Vor%

In diesem Fall kann die Maske geglättet werden (d. h. mit einer Gaußschen Unschärfe), um weniger Aliasing zu erzeugen. Dies führt zu sehr guten Ergebnissen im Vergleich zu einer Einzelwertschwelle.

    
Sergey K. 07.09.2013, 18:40
quelle
1

Es gibt keine Notwendigkeit für mehrere Shader oder Framebuffer, nur mehrere Textureinheiten. Verwenden Sie einfach 3 Textureinheiten, die alle mit denselben Texturkoordinaten indiziert sind, und verwenden Sie die Maskentextur, um zwischen den beiden anderen Texturen zu wählen. Der Fragment-Shader würde so aussehen:

%Vor%

Sie können sehen, dass die Verwendung einer dritten Textureinheit, nur um einen Binär-Test auf dem Red-Kanal durchzuführen, nicht sehr effizient ist, also wäre es besser, die Maske in die Alpha-Kanäle von Textures 1 oder 2 zu kodieren, aber das sollte Du hast angefangen.

    
ClayMontgomery 31.08.2013 17:33
quelle

Tags und Links