2016-07-29 16 views

Antwort

0

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

setzen

Wenn 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 
} 
+0

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? –

+0

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? –

+0

'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

0

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); 
+0

Vielen Dank für Ihre Antwort! Wie würde ich das machen, wenn der Float32Array eindimensional ist und meine TIFFs zweidimensional sind? –

+0

Auch ich bekomme diesen Fehler: TypeError: Argument 6 ist nicht gültig für eine der 6-Argumente Überladungen von WebGLRenderingContext.texImage2D. –

+1

Um Floating-Point-Texturen zu erstellen, muss [die Erweiterung OES_texture_float] (https://www.khronos.org/registry/webgl/extensions/OES_texture_float/) aktiviert werden. –

Verwandte Themen