2016-07-29 30 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 - 例如,通過除以這些點的和矢量長度。