OpenGL - Wasserwellen (mit Lärm)

9

Ich mache gerade Wasserwellen, also beginne ich von Anfang an. Ich habe ein Mesh erstellt, das im Grunde ein flaches Quadrat ist und es im Vertex-Shader animiert (unten ist der Code, der das erreicht)

%Vor%

Wenn man im Prinzip nur die y-Position basierend auf einer sin-und-cos-Funktion bewegt, kann man die Ergebnisse hier sehen!

Ich habe dann versucht, ein paar Perlin-Geräusche hinzuzufügen (laut den Perlin-Geräuschfunktionen von Ian McEwan, hier erhältlich github.com/ashima/webgl-noise) wie folgt

%Vor%

Die Ergebnisse können hier hier beobachtet werden!

Wie Sie deutlich sehen können, gibt es keinen wirklichen "zufälligen" Effekt, den ich suchte (simulieren Sie einige grundlegende zufällige Rauhigkeiten eines Ozeans).

Ich habe mich gefragt, wie es mir möglich wäre, dies zu erreichen (auch Vorschläge, wie man eine der Funktionen verbessern könnte, die sich ändern würden, würden ebenfalls geschätzt).

    
suphug22 22.05.2015, 12:56
quelle

1 Antwort

4

Die einfachste Lösung ist die Verwendung von Texturen, die das benötigte Rauschen enthalten. Wenn die Verschiebung in der Textur beibehalten wird, ist es möglich, die Verschiebung in dem Vertex-Shader anzuwenden, so dass es nicht erforderlich wäre, den Vertex-Puffer zu modifizieren. Um die Wellen in Bewegung zu versetzen, können Sie einen animierten Offset hinzufügen. Es gibt viele Möglichkeiten, wie Sie sagen, den "zufälligen" Effekt zu fälschen. Sie machen zwei Samples von der Textur, verwenden unterschiedlich wechselnde Offsets und fügen dann einfach zwei Verschiebungen hinzu.

Siehe zum Beispiel den folgenden Vertex-Shader:

%Vor%

Ich habe ein einfaches Beispiel mit threejs gemacht:

%Vor% %Vor% %Vor%

Wenn Sie eine bessere Verschiebungstextur verwenden oder sogar zwei verschiedene Texturen für zwei Offsets verwenden, erzielen Sie möglicherweise bessere Ergebnisse.

    
Podgorskiy 22.05.2015 17:06
quelle

Tags und Links