在我的.cpp代码中,我创建了一个四元组列表,其中一些四元组有一个标志,在像素着色器中,我检查这个标志是否被设置,如果标志没有被设置,四元组将会变成红色,例如,如果标志被设置,我想决定每个像素的颜色,所以如果我需要将标记的四元组的一半涂成红色,另一半涂成蓝色,我可以简单地执行如下操作:
if coordinate in quad < something color = red
else colour = blue;
以这种方式,我可以将四分之一的区域涂成蓝色,另外四分之一涂成红色,或者我可以决定在哪里放置红色或蓝色。
想象一下,我有一个50x50像素的四边形。
if(quad.flag == 1)
{
if(Pixel_coordinate.x<25 ) gl_fragColor = vec4(1.0, 0.0, 0.0, 1.0);
else gl_fragColor = vec4(0.0, 1.0, 0.0, 1.0);
}
else
gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
在这种情况下,我期望设置标志的四元组将每个面获取两种颜色。希望我现在更具体了。
谢谢。
只是想补充一些,我不能使用任何纹理。
好的,我现在这样做:
每个四元组有4个纹理坐标(0,0), (0,1), (1,1), (1,0);
我使用以下方法启用纹理坐标:
glTexCoordPointer(2, GL_SHORT, sizeof(Vertex), BUFFER_OFFSET(sizeof(float) * 7));
[vert]
varying vec2 texCoord;
main()
{
texCoord = gl_MultiTexCoord0.xy;
}
[frag]
varying vec2 texCoord;
main()
{
float x1 = texCoord.s;
float x2 = texCoord.t;
gl_FragColor = vec4(x1, x2, 0.0, 1.0);
}
我总是得到黄色,因此x1 = 1,x2 = 1几乎总是如此,有些四边形是黄/绿色的。
我希望在片段着色器中改变纹理坐标,这样我就应该得到一个渐变,我错了吗?