我知道我可以在这样的一行上获得颜色渐变表示:
glBegin (GL_LINES);
glColor3f (1, 0, 0);
glVertex2f (v0_x, v0_y);
glColor3f (0, 0, 1);
glVertex2f (v1_x, v1_y);
glEnd ();
结果:
问题:
是否可以延长此点以获得更多积分?示例:我还有两个点v2和v3。所有点都已连接(v0v1,v1v2,v2v3)。有没有办法在绘制这些线条时获得颜色渐变(红色到蓝色),这样v0会变成红色而v3会变成蓝色?
答案 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_colour
和v2_colour
为额外的顶点着色。如果距离发生变化,请相应地重新计算t1
和t2
- 例如通过划分这些点的和矢量长度。