2012-02-09 47 views
1

我試圖在亮度值介於0和4000之間的情況下在畫布上呈現亮度值的矩陣作爲圖像。我使用2D浮點紋理這樣做,因爲我聽說他們提供了[-inf,inf]之間的範圍。在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 2012-02-11 03:36:50

+0

哦,我忘記補充說,當我創建我的紋理之前,我的數值矩陣在0和1之間進行規範化,然後我完全看到圖像,這就是爲什麼我得出結論,這是一個夾緊問題,而不是一些無關的webGL問題。 – Marc 2012-02-11 04:16:33

+0

這裏有一個工作示例http://jsfiddle.net/greggman/LMbhk/我把值從0到256000,然後除以256000的着色器,並得到我的期望。也許你可以修改它使其失敗? – gman 2012-02-24 23:01:08

相關問題