在WebGL中使用图像数组作为纹理

时间:2013-09-06 09:20:35

标签: javascript webgl

如何在WebGL中使用纹理数组(包含不同的图像)而不单独初始化每个纹理?我想显示一个立方体和一个金字塔(组织成一个数组),每个都有一个不同的纹理图像。这是代码的一部分(初始化纹理):

function handleTexture(texture) {
    gl.bindTexture(gl.TEXTURE_2D, texture);
    gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true);
    gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texture.Img);
    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_NEAREST);
    gl.generateMipmap(gl.TEXTURE_2D);
    gl.bindTexture(gl.TEXTURE_2D, null);
}

function initTextures() {
    for (i=0; i<2; i++) {
        tex[i] = gl.createTexture();
        tex[i].Img = new Image();
        tex[i].Img.onload = function() { handleTexture(tex[i]); }
        tex[i].Img.src = texImgs[i];   // The name of the image file
    }
}

立方体和金字塔以黑色显示(无纹理),我在页面中收到此错误:

Uncaught TypeError: Cannot read property 'Img' of undefined  // gl.texImage2D()
tex.(anonymous function).Img.onload                          // tex[i].Img.onload = ...

如果我单独初始化纹理,不是使用数组,而是使用tex1和tex2,我没有这个错误。有关如何使用数组执行此操作的任何建议吗?

0 个答案:

没有答案