2012-02-09 3 views
1

Я пытаюсь отобразить матрицу значений яркости на холсте в качестве изображения, когда значения яркости находятся между 0 и 4000. Я использую двумерную плавающую точку чтобы сделать это, потому что я слышал, что они предлагают диапазоны между [-inf, inf].Доступ к unclamped значениям из текстур с плавающей запятой в шейдере фрагмента WebGL

gl.texImage2D(gl.TEXTURE_2D, 0, gl.LUMINANCE, ct.columns, ct.rows, 0, gl.LUMINANCE, gl.FLOAT, new Float32Array(ct.grid[i])); 

Однако, когда я иду и получить значение текстуры в моем пиксельном шейдере, они всегда зажаты между [0, 1,0]. В частности,

vec4 texcolour = texture2D(uSampler, vec2(vTextureCoord.s, vTextureCoord.t)); 

texcolour.rgb всегда будет находиться в пределах от 0 до 1.0. Как я могу получить доступ к unclamped значениям внутри моего шейдера фрагментов, чтобы я мог нормально нормализовать себя?

Спасибо

ответ

1

Как вы тестируете это? Вы можете попробовать что-то вроде

vec4 texcolour = texture2D(uSampler, vec2(vTextureCoord.s, vTextureCoord.t)); 
gl_FragColor = texcolour.x > 3000.0 ? vec4(0,1,0,1) : vec4(1,0,0,1); 
+0

Я испытывал его, видя, что весь мой образом был белым (потому что я делаю свою собственную фильтрацию на основе оконных и уровень значений), но после запуска кода я получаю чистый красный блок. – Marc

+0

О, и я забыл добавить, что когда я нормализую свою матрицу значений между 0 и 1 перед созданием своих текстур, я отлично вижу изображение, поэтому я пришел к выводу, что это проблема с фиксацией, а не какая-то не связанная с проблемой webGL проблема. – Marc

+0

Вот рабочий пример http://jsfiddle.net/greggman/LMbhk/ Я помещаю значения от 0 до 256000, а затем делясь на 256000 в шейдере и получая то, что ожидаю. Может быть, вы можете изменить его, чтобы он провалился? – gman