2016-03-19 6 views
1

Soweit ich weiß, ist es möglich, Uint8Array als Textur in WebGL zu verwenden. Aber wie ist es möglich, einen großen Float32Array oder Float64Array effizient an den Shader zu übergeben? Die Gleitkommawerte liegen nicht im Bereich (0,0, 1,0) und können auch negativ sein.Wie verarbeitet man ein Float32Array im Shader? (WebGL)

Ich weiß, einige Geräte unterstützt high precision float nicht, und es ist kein Problem, wenn einige Genauigkeit während des Prozesses verloren geht.

+0

[OES_texture_float] (https://www.khronos.org/registry/webgl/extensions/OES_texture_float/) setzen? –

Antwort

2

versuchen, wie Floating-Point-Texturen mit Code aktivieren

var ext = gl.getExtension("OES_texture_float"); 
if (!ext) { 
    alert("sorry, no floating point textures"); 
    return; 
} 

Jetzt können Sie Texturen mit Float32Array erstellen

gl.texImage2D(target, level, format, width, height, 0, 
       format, gl.FLOAT, someFloat32Array); 

Beachten Sie, dass eine separate Erweiterung ist in der Lage, eine Floating-Point-Textur zu filtern, so wenn Sie filtern benötigen Sie auch zu prüfen, haben für das

var ext = gl.getExtension("OES_texture_float_linear"); 
if (!ext) { 
    alert("sorry, can't filter floating point textures"); 
    return; 
} 

Andernfalls müssen Sie die Texturfilterung auf NEAREST

Verwandte Themen