【发布时间】:2014-10-05 22:51:37
【问题描述】:
我正在尝试绘制一条在两种颜色之间具有平滑渐变的二维线。我的应用程序允许我单击和拖动,线段的第一个点是第一个单击点,线段的第二个点跟随鼠标光标位置。
我有使用glDrawArrays(GL_LINES, 0, points.size()); 的线图,points 是一个 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;
它给出了稳定的黄色,所以我有信心在重绘之间颜色是稳定的。
有什么建议吗?
【问题讨论】:
标签: c++ opengl glsl vector-graphics freeglut