gpt4 book ai didi

glsl - WebGL GLSL 着色器 : accessing texture2D overrides other texture

转载 作者:行者123 更新时间:2023-12-04 18:12:30 27 4
gpt4 key购买 nike

我对 WebGL 中的 glsl 有一个非常令人不安的问题。

此着色器按预期工作:

uniform sampler2D tColor;
uniform sampler2D tNormal;
varying vec2 vUv;

void main() {
gl_FragColor = texture2D( tColor, vUv );
}

但是这个行为完全不同:
uniform sampler2D tColor;
uniform sampler2D tNormal;
varying vec2 vUv;

void main() {
vec4 test = texture2D( tNormal, vUv );
gl_FragColor = texture2D( tColor, vUv );
}

通过访问 tNormal 纹理,tColor 纹理被覆盖。这怎么可能?

最佳答案

过去我看到过类似的行为,这几乎总是因为我不正确地绑定(bind)我的纹理。最近的事件是在我尝试像这样绑定(bind)我的纹理时引起的:

gl.activeTexture(gl.TEXTURE0);
gl.bindTexture(gl.TEXTURE_2D, colorTexture);
gl.uniform1i(colorUniform, gl.TEXTURE0);

gl.activeTexture(gl.TEXTURE1);
gl.bindTexture(gl.TEXTURE_2D, normalTexture);
gl.uniform1i(normalUniform, gl.TEXTURE1);

当正确的语法实际上是:
gl.activeTexture(gl.TEXTURE0);
gl.bindTexture(gl.TEXTURE_2D, colorTexture);
gl.uniform1i(colorUniform, 0); // 0 to indicate texture unit 0!

gl.activeTexture(gl.TEXTURE1);
gl.bindTexture(gl.TEXTURE_2D, normalTexture);
gl.uniform1i(normalUniform, 1); // 1 to indicate texture unit 1!

这是一个相当常见的错误,不幸的是,WebGL 实际上并没有在第一个代码片段(WebGL 邮件列表中最近讨论的主题)上抛出错误,而且它似乎在有限的情况下工作,所以很容易错误地认为这是有效的代码。

我不知道这是否是您的具体问题,但这可能是我可以提供的最佳建议,无需进一步详细信息。

关于glsl - WebGL GLSL 着色器 : accessing texture2D overrides other texture,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10590819/

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