Webgl使用纹理的坐标

时间:2014-08-07 07:28:22

标签: javascript colors webgl shader

在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)
}

总结一下我的问题,我怎样才能将我的一个纹理中的一半变为红色?

谢谢

1 个答案:

答案 0 :(得分:0)

什么是t.x?您正在从纹理中查找颜色,然后根据您从纹理a.t查找的纹理元素的绿色值,如果该纹素的绿色值是> 0.5您&# 39;重新决定返回红色或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);
}