2016-08-03 33 views
2

Ich benutze WebGL und versuche, eine Textur aus mehreren Bildern zu erstellen, die alle von Float-Arrays dargestellt werden, die ich dann in RGBA umwandle.Erstellen von WebGL-Textur schneidet einige der Daten ab

Hier ist mein Code:

var dataTexture = new Uint8Array(array.length*4); 
for(var i=0; i<array.length; i+=4) 
{ 
    dataTexture[i] = 255*parseFloat(array[i/4]); 
    dataTexture[i+1] = 255*255*parseFloat(array[i/4]); 
    dataTexture[i+2] = 255*255*255*parseFloat(array[i/4]); 
    dataTexture[i+3] = 255; 
} 

gl.bindTexture(gl.TEXTURE_2D, self.mTexture); 
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 512, 512, 0, gl.RGBA, gl.UNSIGNED_BYTE, dataTexture);  
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST); 
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST); 

gl.drawArrays(gl.TRIANGLES, 0, 6); 

und das ist das Bild, das nach oben zeigt:

Ich kann nicht das ideale Bild veröffentlichen, aber es sollte etwas zwischen all den schwarzen Streifen sein.

Was ich nicht verstehe, ist, wenn ich versuche, die Werte vorgegeben werden, es funktioniert, wie in dem folgenden Code:

das ist das Bild, das nach oben zeigt.

Dies ist NICHT die ideale Ausgabe, sondern nur ein Beispiel für die Funktionsweise der Einstellwerte.

Warum fehlt die Mitte meines Bildes und was kann ich tun, um es zu beheben? Vielen Dank!

+0

'i

+0

@LJ ᛃ Vielen Dank, so viel! Wenn Sie dies als Antwort angeben, werde ich es korrekt markieren! :) –

Antwort

0

Es ist nicht klar, was Sie hier zu tun versuchen.

dataTexture[i] = 255*parseFloat(array[i/4]); 
dataTexture[i+1] = 255*255*parseFloat(array[i/4]); 
dataTexture[i+2] = 255*255*255*parseFloat(array[i/4]); 
dataTexture[i+3] = 255; 

Der größte Wert, den Sie in einem Uint8Array Element setzen kann, ist 255. Also, was die Reichweite Ihres array Einträge ist, weil Ihr sie von 65025 und dann durch 16581375 multipliziert wird.

Ist auch array von Text gemacht? Warum rufst du sonst parseFloat an?