2016-08-03 2 views
2

Я использую WebGL и пытаюсь создать текстуру из нескольких изображений, все из которых представлены массивами с плавающей точкой, которые затем конвертируются в RGBA.Создание текстуры WebGL отсекает некоторые данные

Вот мой код:

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

и это изображение, которое показывает вверх:

Я не могу отправить идеальный образ, но должно быть что-то между всеми черными полосами.

То, что я не понимаю, когда я пытаюсь запрограммировать значения, он работает, как в следующем коде:

это изображение, которое показывает вверх.

Это НЕ идеальный выход, а просто пример того, как работают значения настройки.

Почему моя часть отсутствует и что я могу ее исправить? Спасибо!

+0

'i

+0

@LJ ᛃ Большое вам спасибо! Если вы поместите это как ответ, я сделаю это правильно! :) –

ответ

0

Непонятно, что вы пытаетесь сделать здесь.

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; 

Наибольшее значение вы можете поместить в Uint8Array элемент 255. Так что диапазон ваших array записей, потому что ваш умножив их на 65025, а затем 16581375.

Также есть array из текста? Иначе почему вы вызываете parseFloat?

Смежные вопросы