Ich habe ein TIFF aus Fließpunkten, nicht RGBA-Werte, so dass es als transparent angezeigt wird. Ich habe C++ verwendet, um die Gleitkommawerte zu erhalten, und jetzt habe ich eine Matrix dieser Werte. Wie kann ich sie mithilfe von WebGL in RGBA konvertieren und daraus eine Textur erstellen?Wie kann ich WebGL verwenden, um eine RGBA-Textur basierend auf Fließkommazahlen zu erstellen?
Antwort
Um Gleitkommazahlen in eine Textur in WebGL laden Sie zu überprüfen und aktivieren Punkt Texturen Floating
var ext = gl.getExtension("OES_texture_float");
if (!ext) {
// Sorry, your browser/GPU/driver doesn't support floating point textures
}
Danach Sie hochladen können Punktdaten
var data = new Float32Array(width * height * 4); //
var texture = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, texture);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0 gl.RGBA, gl.FLOAT, data);
floating Aber Sie können diese Textur nicht filtern, daher müssen Sie sie auf
setzenWenn Sie in der Lage sein wollen, die Sie filtern müssen überprüfen und ermöglichen, dass zu
var ext = gl.getExtensions("OES_texture_float_linear");
if (!ext) {
// sorry, can't filter floating point textures
}
zu einer Gleitkomma-Textur-Rendering ist auch eine optionale Funktion (eine eine Gleitkomma-Texturen als Framebuffer-Befestigung verwendet wird). Dafür würden Sie die Textur anhängen und überprüfen, ob es funktioniert
var fb = gl.createFramebuffer();
gl.bindFramebuffer(gl.FRAMEBUFFER, fb);
gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0);
if (gl.checkFramebufferStatus(gl.FRAMEBUFFER) !== gl.FRAMEBUFFER_COMPLETE) {
// sorry, you can't render to a floating point texture
}
Zugegeben, ich habe das nicht wirklich direkt mit Gleitpunkten für eine Textur versucht, aber ich habe es mit Uint8-Werten gemacht, um eine leere Textur zu erstellen.
const texture = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, texture);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.FLOAT, new Float32Array(putFloatingPointArrayHere));
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
gl.bindTexture(gl.TEXTURE_2D, null);
Vielen Dank für Ihre Antwort! Wie würde ich das machen, wenn der Float32Array eindimensional ist und meine TIFFs zweidimensional sind? –
Auch ich bekomme diesen Fehler: TypeError: Argument 6 ist nicht gültig für eine der 6-Argumente Überladungen von WebGLRenderingContext.texImage2D. –
Um Floating-Point-Texturen zu erstellen, muss [die Erweiterung OES_texture_float] (https://www.khronos.org/registry/webgl/extensions/OES_texture_float/) aktiviert werden. –
- 1. Verwenden von Xlrd, um Fließkommazahlen von xls
- 2. Kann ich Joomla!/WordPress verwenden, um meine Website zu erstellen?
- 3. Wie kann ich xbuild verwenden, um Release-Binär zu erstellen
- 4. Create DLL: Wie kann ich eine DLL verwenden, um eine neue DLL zu erstellen?
- 5. Wie kann ich mechanize verwenden, um auf eine Webseite zu klicken, um Informationen zu erhalten?
- 6. Wie kann ich Python zwingen, das Modul dummdbm zu verwenden, um eine neue Datenbank zu erstellen?
- 7. Wie kann ich Capybara verwenden, um die Ansichtsfunktionalität basierend auf USER_AGENTs zu testen?
- 8. Wie kann ich eine CollectionView erstellen, ohne Storyboard zu verwenden?
- 9. Wie kann ich PHP verwenden, um eine Datumszeichenfolge zu analysieren?
- 10. TFS: Wie kann ich Integer-Feld basierend auf String erstellen?
- 11. Wie kann ich NgFor verwenden, ohne Arrays zu erstellen, um Matrix-UI-Muster zu erstellen
- 12. Wie kann ich Diktat-Software verwenden, um Code zu schreiben?
- 13. Wie benutze ich ein Webview um eine Webgl URL zu zeigen
- 14. Wie Guice oder Spring zu verwenden, um eine Liste der Objekte basierend auf Eigenschaften zu injizieren
- 15. Wie kann ich SessionAuthentication verwenden, um eine Login-Rest-API mit Django Rest Framework zu erstellen?
- 16. Wie kann ich `while` verwenden, um 10` .txt` Dateien im Pfad (auf meinem Desktop) zu erstellen?
- 17. Wie kann ich einen WebGL-Shader benchmarken?
- 18. webgl - wie deklariere ich eine float-Variable
- 19. Wie kann ich eine Spalte basierend auf wie?
- 20. Kann ich for loop durchlaufen, um mehr Javascript zu erstellen?
- 21. Kann ich Erweiterungsmethoden verwenden, um eine Schnittstelle zu implementieren?
- 22. Wie kann ich CloudKit-Webdienste verwenden, um Abfragen basierend auf einem Referenzfeld durchzuführen?
- 23. Wie verwende ich Waf, um eine gemeinsame Bibliothek zu erstellen?
- 24. Wie kann ich eine neue Anmerkung erstellen?
- 25. Wie verwende ich Factory Girl, um eine Büroklammeranlage zu erstellen?
- 26. Wie kann ich die Grade ausarbeiten, um ein Rad basierend auf der Schleppdistanz zu drehen?
- 27. Mehr perverser Weg, um Strings mit führenden Fließkommazahlen zu sortieren?
- 28. Kann ich eine Richtlinie für eine AWS DynamoDB-Tabelle basierend auf einem Nicht-Schlüsselattributwert erstellen?
- 29. Wie kann ich auf das zwischengespeicherte Bild von Picasso zugreifen, um eine gemeinsame Absicht zu erstellen?
- 30. Wie kann ich eine Zweigniederlassung auf Git erstellen, um Android-Projekte mit Espresso zu testen?
Vielen Dank für diese Antwort! Ich denke, es könnte funktionieren. Ich habe jedoch eine Frage: Wenn Sie das Float32Array erstellen, beziehen sich die Breite und Höhe, die es verwendet, auf die Zeichenfläche. Sollte es diese oder die Breite und Höhe meiner Datenmatrix verwenden? –
Wenn ich versuche, diesen OES_texture_float zu bekommen und zu sehen, ob er unterstützt wird, erscheint in jedem Browser, den ich versuche, Firefox, Chrome, SeaMonkey und Chromium, der Alarm, den ich unter 'if (! Ext)' gesetzt habe. Bedeutet das, dass ich keine Float-Texturen erstellen kann? –
'Breite' und' Höhe' sind die Breite und Höhe Ihrer Textur. Das '* 4' nimmt an, dass Sie eine' RGBA' Textur wollen. Wenn Sie eine andere Art von Textur erstellen, ändern sich diese Berechnungen. 'RGB' wäre' * 3'. 'ALPHA' oder' LUMINANCE' wäre '* 1' usw. Wenn" ext "NULL ist, deutet das darauf hin, dass Ihr Computer Fließkomma-Texturen nicht unterstützt (oder Sie den Namen der Erweiterung falsch geschrieben haben). Auf welcher Art von Maschine bist du? Welches OS? Sie können alle unterstützten Erweiterungen mit 'gl.getSupportedExtensions()' sehen. – gman