gpt4 book ai didi

javascript - WebGL:如何绑定(bind)采样器数组

转载 作者:行者123 更新时间:2023-11-30 05:47:36 25 4
gpt4 key购买 nike

如前所述here可以“将您需要的所有纹理绑定(bind)到着色器中的采样器数组,然后使用顶点属性对其进行索引”。我将如何进行绑定(bind)?目前我像这样绑定(bind)我的纹理(如果首先是正确的;它至少有效):

sampler[i] = gl.getUniformLocation(program, "u_sampler" + i);
...
for (var i = 0, len = textures.length; i < len; i++) {
gl.activeTexture(gl.TEXTURE0 + i);
gl.bindTexture(gl.TEXTURE_2D, textures[i]);
gl.uniform1i(sampler[i], i);
}

现在要绑定(bind)采样器数组,我会扔掉 activeTexturebindTexture 并使用类似这样的东西吗?

gl.uniform1iv(sampler, [0,...,len-1]);

最佳答案

没关系,我想我找到了解决方案。我的代码如下所示:

var texture = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, texture);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);
gl.texParameteri(...
gl.bindTexture(gl.TEXTURE_2D, null);
textures[i] = texture;

...compose texture images...

gl.activeTexture(gl.TEXTURE0 + i);
gl.bindTexture(gl.TEXTURE_2D, textures[i]);
gl.texSubImage2D(gl.TEXTURE_2D, 0, xoffset, yoffset, gl.RGBA, gl.UNSIGNED_BYTE, image);

...fill all textures...

var sampler = gl.getUniformLocation(program, "u_sampler");
var samplerArray = new Int32Array(textures.length);
var len = samplerArray.length;
while (len--) {
samplerArray[len] = len;
}
gl.uniform1iv(sampler, samplerArray);

现在我可以通过 u_sampler[i] 正确访问片段着色器中的采样器。

关于javascript - WebGL:如何绑定(bind)采样器数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17093477/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com