Three.js Abrufen von Daten aus WebGLRenderTarget (Wasser-Sim)

8

Ich versuche, dies ( Ссылка ) auf DREI zu übertragen. Ich denke, dass ich nah dran bin (will nur die Simulation für den Moment, kümmere mich nicht um Ätzmittel / Refraktion). Ich würde es gerne mit Shadern für den GPU-Boost arbeiten.

Hier ist meine aktuelle DREI-Konfiguration mit Shadern: Ссылка (Die zweite kleinere Ebene dient zum Debuggen, was aktuell im WebGLRenderTarget ist)

Ich kämpfe mit Daten aus dem WebGLRenderTarget (rtTexture in meinem Beispiel). In diesem Beispiel sehen Sie, dass die 4 Eckpunkte um den Mittelpunkt herum nach oben verschoben sind. Dies ist korrekt (nach 1 Simulationsschritt), da es damit beginnt, dass der Mittelpunkt der einzige Verschiebungspunkt ist.

Wenn ich die Daten aus der rtTexture lesen und die Datenstruktur (buf1) für jeden Frame aktualisieren könnte, sollte die Simulation richtig animiert werden. Wie liest man die Daten direkt aus einem WebGLRenderTarget? Alle Beispiele zeigen, wie Daten an das Ziel gesendet (rendern), nicht von FROM gelesen werden. Oder mache ich alles falsch? Irgendetwas sagt mir, dass ich mit mehreren Texturen arbeiten muss und irgendwie ähnlich wie Evan hin und her tauschen muss.

TL; DR: Wie kann ich Daten von einem WebGLRenderTarget nach einem solchen Aufruf in ein DataTexture kopieren:
// render to rtTexture
renderer.render( sceneRTT, cameraRTT, rtTexture, true );

EDIT: Vielleicht haben Sie die Lösung gefunden bei jsfiddle / gero3 / UyGD8 / 9 / Wird recherchieren und zurückmelden.

    
relicweb 11.08.2013, 01:06
quelle

1 Antwort

10

Ok, ich habe herausgefunden, wie man die Daten mit nativen Webgl-Anrufen liest:

%Vor%


Die Simulation wird jetzt animiert. Es scheint jedoch nicht richtig zu funktionieren (wahrscheinlich ein dummer Fehler, den ich übersehen habe). Es scheint, dass die Höhenwerte niemals gedämpft werden und ich bin mir nicht sicher warum. Die Daten von buf1 werden im Fragment-Shader verwendet, der die neue Höhe berechnet (rot in RGBA), den Wert dämpft (mit 0,99 multipliziert) und dann in eine Textur rendert. Ich lese dann diese aktualisierten Daten von der Textur zurück in buf1.

Hier ist die neueste Geige: Ссылка

Ich werde das auf dem Laufenden halten.

EDIT: Funktioniert jetzt großartig. Es wurden gerade Normalen implementiert und nun arbeiten wir an der Reflektion und Refraktion der Umgebung (wiederum rein durch Shader). Ссылка

    
relicweb 11.08.2013, 19:22
quelle

Tags und Links