2013-03-03 129 views
2

我有一個奇怪的問題與webGL。WebGL:數據到非方形alpha紋理

我使用的動態生成的紋理只有alpha通道很重要。 下面的代碼:

var texture = new Uint8Array(ar); // ar is my array 
gl.bindTexture(gl.TEXTURE_2D, this.transparencyTexture); 
gl.texImage2D(gl.TEXTURE_2D, 0, gl.ALPHA, array.length, array[0].length, 0, gl.ALPHA, gl.UNSIGNED_BYTE, texture); 
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); 
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_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); 

我一直在使用一個POT陣」‘寬度’和‘高度’,但只要‘寬度’<>‘高度’這是行不通的。所以它目前只適用於正方形。

可以做些什麼?

編輯:

http://jsfiddle.net/SergeJcqmn/EAmjU/9/

+0

似乎是一個瀏覽器錯誤,但很難知道沒有更多的細節。例如,你的紋理座標是什麼?你從'gl.getError()'得到什麼?它是如何在視覺上出現的? – prideout 2013-03-04 02:19:36

+0

只是好奇,但'array.length,array [0] .length'?所以你有一個2維數組在JavaScript中?這與'ar'有什麼關係? – gman 2013-03-04 17:37:56

+0

我提供了正確的座標(也用於其他紋理)。 gl.getError()返回0.它僅顯示爲vec4(0,0,0,0)像素/片段。 – Serge 2013-03-05 19:15:54

回答

1

在的jsfiddle中,JS的線76是不正確的:

ar.push(array[x][(array.length - 1) - y] ? 128 : 0); 

我相信這應該是:

ar.push(array[x][(array[0].length - 1) - y] ? 128 : 0); 
+0

你完全正確。我很驚訝沒有「脫離索引」的錯誤得到支持(因爲這是錯誤的)。謝謝。 – Serge 2013-03-09 10:16:40