Glsl 在这种情况下,我应该在片段着色器中编写逻辑吗?

Glsl 在这种情况下,我应该在片段着色器中编写逻辑吗?,glsl,webgl,Glsl,Webgl,我有3个目标: 立方 立方 立方 我想画: 立方1为红色(1,0,0) 带纹理1的立方体2 立方体3和纹理2 在片段着色器中,我使用 FragColor=颜色*纹理2D(u_纹理,纹理坐标) 和往常一样,但这段代码也用纹理颜色绘制了我的第一个立方体,我希望它只有红色。所以颜色混淆了。我的问题是,我是否应该在片段着色器中编写一个逻辑来区分这些情况?创建一个具有单一(白色)颜色的1x1纹理,并将其用于统一颜色的立方体。 绑定和使用此纹理比更改着色器程序“便宜得多”: let whiteTe

我有3个目标:

  • 立方
  • 立方
  • 立方
我想画:

  • 立方1为红色(1,0,0)
  • 带纹理1的立方体2
  • 立方体3和纹理2
在片段着色器中,我使用

FragColor=颜色*纹理2D(u_纹理,纹理坐标)

和往常一样,但这段代码也用纹理颜色绘制了我的第一个立方体,我希望它只有红色。所以颜色混淆了。我的问题是,我是否应该在片段着色器中编写一个逻辑来区分这些情况?

创建一个具有单一(白色)颜色的1x1纹理,并将其用于统一颜色的立方体。 绑定和使用此纹理比更改着色器程序“便宜得多”:

let whiteTexture=gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D,白色纹理);
gl.texImage2D(gl.TEXTURE_2D,0,gl.RGBA,1,1,0,gl.RGBA,gl.UNSIGNED_字节,
新的UINT8阵列([255255]);
gl.texParameteri(gl.TEXTURE\u 2D,gl.TEXTURE\u MAG\u过滤器,gl.NEAREST);
gl.texParameteri(gl.TEXTURE\u 2D,gl.TEXTURE\u MIN\u过滤器,gl.NEAREST);
注意,对该纹理的查找(
texture2D(u_纹理,TextureCoordinates)
)将始终返回
vec4(1.0)

如果纹理已绑定(到指定给
u\u纹理的纹理单元
),则

FragColor=颜色*纹理2D(u_纹理,纹理坐标);
将设置与相同的碎片颜色

FragColor=Color*vec4(1.0);

如果不想切换着色器,请创建一个具有单一(白色)颜色的1x1纹理,并将其用于均匀颜色的立方体。绑定纹理比更改程序要“便宜”得多。谢谢。。。如果你回答,我可以把这当作回答。我认为切换着色器对我来说更容易。