【发布时间】:2011-10-10 07:27:12
【问题描述】:
我是 WebGL 新手,遇到了一些着色器问题。我想在场景中做多个光源。我在网上搜索,知道在WebGL中,你不能将数组传递给片段着色器,所以唯一的方法是使用纹理。这是我无法弄清楚的问题。
首先,我使用以下代码创建一个 32x32 纹理:
var pix = [];
for(var i=0;i<32;i++)
{
for(var j=0;j<32;j++)
pix.push(0.8,0.8,0.1);
}
gl.activeTexture(gl.TEXTURE0);
gl.bindTexture(gl.TEXTURE_2D, lightMap);
gl.pixelStorei(gl.UNPACK_ALIGNMENT,1);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGB, 32,32,0, gl.RGB, gl.UNSIGNED_BYTE,new Float32Array(pix));
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
gl.uniform1i(g_loader.program.set_uniform["u_texture2"],0);
但是,当我尝试访问着色器中的纹理时:
[片段着色器]
varying vec2 v_texcoord;
uniform sampler2D u_texture2;
void main(void)
{
vec3 lightLoc = texture2D(u_texture, v_texcoord).rgb;
gl_FragData[0] = vec4(lightLoc,1.0);
}
结果是全黑的。有谁知道如何正确访问或创建纹理?
【问题讨论】:
-
欢迎来到SO,希望您阅读FAQ。
标签: arrays textures shader webgl