Если вы не хотите, чтобы интерполяция между атрибутами вершин в примитиве (например, цвет в сегменте линии в вашем случае) вам понадобится дважды передать один и тот же цвет, поэтому в конечном итоге дублируйте вашу геометрию:
v0 v1 v2
x--------------x-----------x
(v0 состоит из структур p0 и c0, v1 из p1 и c1 и т. Д.)
Для рисования линии с цветной интерполяцией:
glBegin(GL_LINES);
//draw first segment
glColor3fv(&c0); glVertex3fv(&p0);
glColor3fv(&c1); glVertex3fv(&p1);
//draw second segment
glColor3fv(&c1); glVertex3fv(&p1);
glColor3fv(&c2); glVertex3fv(&p2);
glEnd();
Для рисования без интерполяции:
glBegin(GL_LINES);
//draw first segment
glColor3fv(&c0); glVertex3fv(&p0);
glColor3fv(&c0); glVertex3fv(&p1);
//draw second segment
glColor3fv(&c1); glVertex3fv(&v1);
glColor3fv(&c1); glVertex3fv(&v2);
glEnd();
Обратите внимание, это означает, что вы больше не можете использовать топологию GL_x_STRIP
, поскольку вы не хотите обмениваться атрибутами внутри примитива.