OpenGL ES 2.0 Vertex-Transformationsalgorithmen

8

Ich entwickle eine Bildverzerrungs-iOS-App mit OpenGL ES 2.0.

Ich habe ein gutes Gespür für den Aufbau, die Pipeline usw. und gehe jetzt zur Mathematik über.

Da meine Erfahrung mit Image Warping gleich Null ist, strebe ich nach einigen Algorithmus-Vorschlägen.

Momentan setze ich die Anfangscheitelpunkte an Punkten in einem Gittertyp, die das Bild gleichmäßig in Quadrate aufteilen. Dann platziere ich einen zusätzlichen Eckpunkt in der Mitte jedes dieser Quadrate. Wenn ich die Indizes zeichne, enthält jedes Quadrat vier Dreiecke in Form eines X. Siehe das Bild unten:

Nachdem ich ein wenig mit Photoshop gearbeitet habe, bemerkte ich, dass Adobe einen etwas komplizierteren Algorithmus für seine Marionettenverzerrung verwendet, aber einen viel vereinfachteren Algorithmus für ihre Standardverzerrung. Was denkst du ist das Beste für mich, hier / persönliche Präferenzen zu bewerben?

Zweitens: Wenn ich einen Stützpunkt verschiebe, möchte ich eine gewichtete Transformation auf alle anderen Stützpunkte anwenden, um die Kanten zu glätten (anstatt wie unten, wo nur der ausgewählte Stützpunkt transformiert wird). Welche Art von Algorithmus sollte ich hier anwenden?

    
Matisse VerDuyn 19.03.2012, 20:24
quelle

1 Antwort

4

Da jeder Vertex vom Vertex-Shader unabhängig verarbeitet wird, ist es nicht einfach, dass die Vertexe die Positionen der anderen beeinflussen. Da es nicht so viele Scheitelpunkte gibt, sollte es in Ordnung sein, die CPU zu bearbeiten und die Scheitelpunktattribute dynamisch pro Rahmen zu aktualisieren.

Was Sie suchen, ist, dass Ihre Oberfläche wie ein Gummiblatt wirkt, wenn Teile davon gezogen werden. Wie wäre es damit, eine dynamische Simulation einer Gummiplatte durchzuführen? Es gibt viele gute Artikel über Stoffsimulation in 3D, wie zum Beispiel Jeff Landers Jeff Lander . Ihre Anwendung könnte eine Vereinfachung dieser Techniken sein. Ich habe eine Simulation wie diese in 3D implementiert. Ich benötigte eine Kraft, die meine erzeugten Eckpunkte an ihre ursprünglichen Gitterpositionen lockte. Sie könnten eine ähnliche Kraft haben, die Scheitelpunkte zu den Pixeln zieht, in denen sie erzeugt werden, bevor die Simulation begonnen wird. Dies würde dazu führen, dass sie in ihren Standardzustand zurückkehren, wenn sie alleine gelassen werden und den Einfluss des Ziehens an entfernteren Ecken progressiv reduzieren würden.

    
ahcox 20.03.2012, 23:42
quelle