多重纹理设置时,着色器没有定义材质变量,最后也能渲染只是效果有问题,这个为啥

发布于 2025-03-06 15:27:57

片段着色器

let fragmentString = `

  precision mediump float;
  varying vec2 outST;
  uniform sampler2D u_Sampler;
  uniform sampler2D u_Sampler2;
  uniform float movement;
  void main() {
    vec4 color1 = texture2D(u_Sampler, outST);
    vec4 color2 = texture2D(u_Sampler2, vec2(outST.x + movement, outST.y));
    gl_FragColor = color1 + color2;
  }
`

取值代码

uniformTexture = webgl.getUniformLocation(webgl.program, "texture1");
uniformTexture2 = webgl.getUniformLocation(webgl.program, "texture2");
texture1 = initTexture('./images/shanshui.png');
texture2 = initTexture('./images/fog.png');

赋值代码

webgl.activeTexture(webgl.TEXTURE0);
webgl.bindTexture(webgl.TEXTURE_2D, texture1);
webgl.uniform1i(uniformTexture, 0);

webgl.activeTexture(webgl.TEXTURE1);
webgl.bindTexture(webgl.TEXTURE_2D, texture2);
webgl.uniform1i(uniformTexture2, 1);

计算结果

image.png

查看更多

关注者
0
被浏览
103
1 个回答
Jsonco
Jsonco 图形社区官方人员 6天前
奔驰的蜗牛

不好意思刚看到问题,经过我调试和排除。将问题定位到以下内容
image.png
上面从shder中获取的uniform变量名字是不正确且吻合的,以上是我按照你shader中定义的变量名称修改后的内容,经过测试是正确的

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览