2016-07-29 86 views
0

我知道,我能得到这样的线颜色渐变表示: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

问题:

是否有可能将此扩展为m矿点?例如:我还有两点v2和v3。所有点连接(v0v1,v1v2,v2v3)。有什么办法可以在绘制这些线条时使颜色渐变(红色变为蓝色),使v0变成红色,而v3变成蓝色?

回答

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 - 例如,通过除以这些点的和矢量长度。