在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)
}
总结一下我的问题,我怎样才能将我的一个纹理中的一半变为红色?
谢谢
答案 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);
}