gpt4 book ai didi

javascript - 如何将多个纹理发送到 WebGL 中的片段着色器?

转载 作者:数据小太阳 更新时间:2023-10-29 05:10:25 25 4
gpt4 key购买 nike

所以在我的代码的 javascript 部分,这里是实际上将像素数组发送到顶点和片段着色器的片段 - 但当我到达那些着色器时我只使用 1 个纹理 - 无论如何我可以一次发送两个纹理吗?如果是这样,我将如何在编码器的 GLSL 端“捕获”它们?

        if (it > 0){

gl.activeTexture(gl.TEXTURE1);

gl.bindTexture(gl.TEXTURE_2D, texture);

gl.activeTexture(gl.TEXTURE0);

gl.bindFramebuffer(gl.FRAMEBUFFER, FBO2);}

else{

gl.activeTexture(gl.TEXTURE1);

gl.bindTexture(gl.TEXTURE_2D, texture2);

gl.activeTexture(gl.TEXTURE0);

gl.bindFramebuffer(gl.FRAMEBUFFER, FBO);}

gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);

最佳答案

您通过声明多个采样器制服在 GLSL 中引用多个纹理

uniform sampler2D u_myFirstTexture;
uniform sampler2D u_mySecondTexture;

...

vec4 colorFrom1stTexture = texture2D(u_myFirstTexture, someUVCoords);
vec4 colorFrom2ndTexture = texture2D(u_mySecondTexture, someOtherUVCoords);

您可以通过调用 gl.uniform1i 来指定这 2 个采样器使用的纹理单元

var location1 = gl.getUniformLocation(program, "u_myFirstTexture");
var location2 = gl.getUniformLocation(program, "u_mySecondTexture");

...

// tell u_myFirstTexture to use texture unit #7
gl.uniform1i(location1, 7);

// tell u_mySecondTexture to use texture unit #4
gl.uniform1i(location2, 4);

然后使用 gl.activeTexturegl.bindTexture 设置纹理单元

// setup texture unit #7
gl.activeTexture(gl.TEXTURE7); // or gl.TEXTURE0 + 7
gl.bindTexture(gl.TEXTURE_2D, someTexture);
...

// setup texture unit #4
gl.activeTexture(gl.TEXTURE4); // or gl.TEXTURE0 + 4
gl.bindTexture(gl.TEXTURE_2D, someOtherTexture);
...

关于javascript - 如何将多个纹理发送到 WebGL 中的片段着色器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19755320/

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