OpenGL:使用给定线段的颜色渐变

时间:2016-07-29 08:34:38

标签: opengl

我知道我可以在这样的一行上获得颜色渐变表示:

glBegin (GL_LINES);

glColor3f  (1, 0, 0);
glVertex2f (v0_x, v0_y);
glColor3f  (0, 0, 1);
glVertex2f (v1_x, v1_y);

glEnd ();

结果:

enter image description here

问题:

是否可以延长此点以获得更多积分?示例:我还有两个点v2和v3。所有点都已连接(v0v1,v1v2,v2v3)。有没有办法在绘制这些线条时获得颜色渐变(红色到蓝色),这样v0会变成红色而v3会变成蓝色?

1 个答案:

答案 0 :(得分:2)

您需要使用linear interpolation计算此点的颜色。

如果所有顶点之间的距离相同:

static void lerp3(float *o, const float *a, const float *b, float t) {
    float it = 1.0f - t;
    o[0] = it*a[0]+t*b[0];
    o[1] = it*a[1]+t*b[1];
    o[2] = it*a[2]+t*b[2];
}

/* ... */

float v0_colour[3] = {1.0f, 0.0f, 0.0f};
float v1_colour[3], v2_colour[3];
float v3_colour[3] = {0.0f, 0.0f, 1.0f};

float t1 = 1.0f / 3;
float t2 = 1.0f / 3 + t1;

lerp3(v1_colour, v0_colour, v3_colour, t1);
lerp3(v2_colour, v0_colour, v3_colour, t2);

然后只需使用v1_colourv2_colour为额外的顶点着色。如果距离发生变化,请相应地重新计算t1t2 - 例如通过划分这些点的和矢量长度。