2013-11-04 141 views
1

所以我正在使用WebGL中的GPU着色器進行計算 - 在代碼的JavaScript部分中,我將預先計算的值放到數組上作爲紋理髮送,以便在片段shader-WebGL 1D紋理 - 着色器值捕獲

 var count=0; 
     var table = []; 
     for (var y = 0.1; y<1; y+=.01) { 

      for (var x = 0.1; x<1; x+=.01) { 

       var u = x; 
       var u2 = y; 
       u += u2 * 0.003921568627451; 
       u *= 4.0; 
       var sig = 1/(Math.exp(2.0 *(u-3)) + 1); 

       table.push(Math.floor(sig*255)); 
       //table.push(255); 
       table.push(0); 
       table.push(0); 
       table.push(0); 
       count+=4; 


       console.log(Math.floor(sig*255)+""); 
       console.log(0+""); 
       console.log(0+""); 
       console.log(0+""); 


      } 

     } 

     //alert(count); 
      //alert(table[101]); 

     texturetab = gl.createTexture(); 

     gl.bindTexture(gl.TEXTURE_2D, texturetab); 

     gl.pixelStorei(gl.UNPACK_ALIGNMENT, 1); 

     gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 100, 100, 0, 

         gl.RGBA, gl.UNSIGNED_BYTE, new Uint8Array(table)); 

     // 

     gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST); 

     gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST); 

     gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); 

     gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); 



     gl.uniform1i(gl.getUniformLocation(prog, "uTabSamp"), 2); 

但是當我「趕」上着色器的紋理值,計算作爲如果只是閱讀0-24值它不改變,因爲它應─ (哪裏片段該值在片段着色器上被捕獲):

 sigmoid = (texture2D(uTabSamp, vec2(floor(u*100.+.5), floor(u2*100.+.5))).r)/255.; 

     float hfunc = sigmoid * u * u; 
     float ffunc = -u +(a - pow(v*nb,m))*hfunc ; 

看到WebGL難以閱讀,我該如何解決這個問題?

回答

1

的Texture2D(uTabSamp,VEC2(地板(U * 100。+。5),地板(U2 * 100。+。5))

紋理樣本座標必須範圍從0.0到1.0。因此,根據您製作的紋理尺寸縮放您的查找。

您的紋理製作代碼未顯示,但確保將插值設置爲NEAREST(假設您想精確訪問這些值),並從例如,來自128×32紋理的左下像素將在vec2(0.5/128.0, 0.5/32.0)處找到

+2

gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MIN_FILTER,gl.NEAREST); gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MAG_FILTER,gl.NEAREST); gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_S,gl.CLAMP_TO_EDGE); gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_T,gl.CLAMP_TO_EDGE); 像這樣? – Skorpius

+0

的確如此。 –