2016-07-29 22 views
0

Gibt es eine gute/empfohlene Möglichkeit, die Bildverarbeitung in den Fragment-Shadern durchzuführen und die Ergebnisse dann in eine externe Javascript-Struktur zu exportieren?Bildverarbeitung im Shader und Exportergebnisse

Ich verwende derzeit eine Shader Textur mit THREEJS (WebGL 1.0), um meine Daten anzuzeigen. Es enthält ein Array von 2D-Texturen als einheitlich. Ich verwende es, um eine 3D-Textur zu emulieren.

Zu diesem Zeitpunkt sind alle meine Daten im Fragment Shader gespeichert und ich möchte einige Bildverarbeitung für die gesamten Daten (nicht nur die Pixel auf dem Bildschirm), wie zum Beispiel Schwellwertbildung, exportieren und dann die Ergebnisse der Segmentierung in a exportieren richtiges JS-Objekt.

Ich möchte es in den Shadern tun, da es so viel schneller läuft.

Rendering To Texturing würde in diesem Fall nicht helfen (ich glaube), weil ich die gesamte 3D-Textur ändern/aktualisieren möchte, nicht nur, was auf dem Bildschirm sichtbar ist.

Ich glaube nicht, dass der Effekt Composer von THREEJS ist, was ich auch suche.

Macht es Sinn? Fehle ich etwas?

Gibt es Code/Demo/Literatur zur Verfügung über "fortgeschrittene" Imaging-Verarbeitung in den Shadern (oder besser noch mit THREEJS Shader Texture), dann speichern Sie die Ergebnisse?

Beste

Antwort

0

Sie wie gewohnt in die Leinwand übertragen und dann canvas.getImageData(), um das Bild abzurufen.

Dann gibt es die Methode renderer.readRenderTargetPixels() (siehe here). Ich habe es noch nicht benutzt, aber es scheint zu tun, was du willst.

So können Sie nur wie beschrieben (Rendern in Textur wird überschreiben Ihre Texturen so weit ich kann sagen) in einen Framebuffer (d. H. Mit THREE.WebGLRenderTarget) und dann diese Methode, um die Bilddaten abrufen.

+0

Hmm das scheint nicht zu helfen - im Grunde gebe ich eine Uniform zu meinem Shader, dann möchte ich es vom Shader selbst aktualisieren, wenn möglich ... – Nicolas

+0

Leider wird das nicht funktionieren. Uniformen (und tatsächlich alle nicht-lokalen Variablen) sind immer nur lesbar. Die einzige Möglichkeit, ein Bild aus einer Shader-Berechnung auszugeben, besteht darin, es in einen Framebuffer zu schreiben. –