我试图画一条二维线,两种颜色之间有一个平滑的渐变。我的应用程序允许我单击并拖动,线段的第一个点是第一个点击点,线的第二个点跟随鼠标光标位置。
我使用glDrawArrays(GL_LINES, 0, points.size());
绘制线条图,点是2个点的索引数组。
该行绘制精细,单击并拖动以围绕作品移动线条,但我的片段着色器具有可解释的行为:
uniform vec4 color1; //Color at p1
uniform vec4 color2; //Color at p2
out vec4 fragColor;
void main()
{
//Average the fragment positions
float weight = (gl_PointCoord.s + gl_PointCoord.t) * 0.5f;
//Weight the first and second color
fragColor = (color1 * weight) + (color2 * (1.0f - weight));
}
color1
为红色,color2
为绿色。
当我拖动它的线时,它会在完全红色,完全绿色,我想要的渐变之间反弹,或者在每个屏幕上重新绘制一些红色和绿色的固体混合物。
我怀疑我错误地使用了gl_PointCoord
,但我无法在着色器中检查这些值。我在着色器中尝试了以下内容:
fragColor = (color1 + color2) * 0.5f;
它提供稳定的黄色,所以我有信心在重绘之间颜色是稳定的。
任何提示?
答案 0 :(得分:3)
gl_PointCoord
仅为 point 原始定义。将它与GL_LINES
一起使用只是未定义的行为,永远不会起作用。
如果想要平滑渐变,则应在行顶点添加weight
属性,并分别为起点和终点设置为0或1。