有没有办法实现这个目标(OpenGL 2.1)?如果我画这样的线
glShadeModel(GL_FLAT);
glBegin(GL_LINES);
glColor3f(1.0, 1.0, 0.0);
glVertex3fv(bottomLeft);
glVertex3fv(topRight);
glColor3f(1.0, 0.0, 0.0);
glVertex3fv(topRight);
glVertex3fv(topLeft);
.
.
(draw a square)
.
.
glEnd();
我得到了所需的结果(每条边的颜色不同),但我希望能够在着色器中计算片段值。如果我在设置着色器程序后也这样做,我总是在顶点之间获得插值颜色。有没有解决的办法? (如果我可以使用四边形得到相同的结果会更好)
由于
答案 0 :(得分:1)
如果您不希望在基元内的顶点属性之间进行插值(例如,在您的情况下为线段中的颜色),则需要将相同的颜色传递两次,因此最终会复制几何体:
v0 v1 v2
x--------------x-----------x
(v0由结构p0和c0,v1和p1等组成。)
使用颜色插值绘制线条
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
拓扑,因为您不希望在基元内共享属性。