2016-07-29 12 views
0

Ich weiß, dass ich einen Farbverlauf Darstellung auf einer Zeile wie diese bekommen:OpenGL: Mit Farbverläufe für bestimmte Liniensegmente

glBegin (GL_LINES); 

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

glEnd(); 

Ergebnis:

enter image description here

Frage :

Ist es möglich, dies für m zu erweitern Erz Punkte? Beispiel: Ich habe zwei weitere Punkte v2 und v3. Alle Punkte sind verbunden (v0v1, v1v2, v2v3). Gibt es eine Möglichkeit, beim Zeichnen dieser Linien einen Farbverlauf (rot nach blau) zu erhalten, so dass v0 rot und v3 blau gefärbt wäre?

Antwort

2

Sie müssen Farben für diese Punkte mit linear interpolation berechnen.

Wenn der Abstand zwischen allen Ecken ist das gleiche:

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); 

Dann benutzen Sie einfach v1_colour und v2_colour Ihre persönlichen Ecken zu färben. Wenn die Entfernung variiert, berechnen Sie t1 und t2 entsprechend neu - z. indem die Summe der Vektorlängen dieser Punkte geteilt wird.