2016-07-29 2 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鉱石のポイント?例:私はさらに2つのポイント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を再計算します。これらの点の和ベクトル長を分割することによって計算される。