Javascript 使用纹理坐标的Webgl

Javascript 使用纹理坐标的Webgl,javascript,colors,webgl,shader,Javascript,Colors,Webgl,Shader,在webgl中,我创建了一个场景,其中有4个对象,我在每个对象上添加了不同的纹理。每个纹理都通过统一变量传递给着色器。我想把我的一件物品的一半变成红色。但每次我尝试将其中一个对象的一半更改为红色时,我都会以某种方式使每个纹理的一半变为红色。下面是我目前在片段着色器中拥有的内容 varying vec2 vTextureCoord; uniform sampler2D Texture2; vec4 a = texture2D(Texture2, vTextureCoord); if(a.t>

在webgl中,我创建了一个场景,其中有4个对象,我在每个对象上添加了不同的纹理。每个纹理都通过统一变量传递给着色器。我想把我的一件物品的一半变成红色。但每次我尝试将其中一个对象的一半更改为红色时,我都会以某种方式使每个纹理的一半变为红色。下面是我目前在片段着色器中拥有的内容

varying vec2 vTextureCoord;
uniform sampler2D Texture2;
vec4 a = texture2D(Texture2, vTextureCoord);
if(a.t>0.5)
{
gl_FragColor = vec4(1.0,0.0,0.0,1.0)
}
else
{
gl_FragColor = vec4(t.x,0.0,0.0,1.0)
}
所以总结一下我的问题,我怎样才能让我的一个纹理的一半变成红色


谢谢

什么是
t.x
?您正在从纹理中查找颜色,然后根据从纹理
a.t
中查找的纹理的绿色值,如果该纹理的绿色值为
>0.5
您决定返回红色或
vec4(t.x,0,0,1)
,这是另一种红色

根据你的描述,我猜你想根据纹理坐标选择红色,而不是纹理的纹理颜色。那样的话,你想要什么

if (vTextureCoord.t > 0.5)  // If the texture coordinate's t is > 0.5
而不是

if (a.t)   // If the texel's green value is > 0.5
如果你想选择纹理颜色或红色,你可以这样做

varying vec2 vTextureCoord;
uniform sampler2D Texture2;

void main() {
  vec4 a = texture2D(Texture2, vTextureCoord);
  if (vTextureCoord.t > 0.5)
  {
    gl_FragColor = vec4(1.0,0.0,0.0,1.0);
  }
  else
  {
    gl_FragColor = a;
  }
}
你也可以这样做

varying vec2 vTextureCoord;
uniform sampler2D Texture2;

void main() {
  vec4 a = texture2D(Texture2, vTextureCoord);
  gl_FragColor = (vTextureCoord.t > 0.5) ? vec4(1,0,0,1) : a;
}
还是这个

varying vec2 vTextureCoord;
uniform sampler2D Texture2;

void main() {
  gl_FragColor = (vTextureCoord.t > 0.5) ? vec4(1,0,0,1) : texture2D(Texture2, vTextureCoord);
}

@哦,对不起,我有一个问题,但是我想当我打这个问题的时候,我把它和vec2搞混了。但是我现在解决了这个问题谢谢你的回答。它非常有用。我现在唯一的问题是,我的场景中有一半的对象变为红色,但我只想更改其中一个对象的颜色使用另一个着色器,或者添加一个统一的布尔,或者添加某种可以设置为0或1的倍增,等等。。