1

有没有办法实现这一点(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();

我得到了想要的结果(每个边缘的颜色不同),但我希望能够在着色器中计算片段值。如果我在设置我的着色器程序后做同样的事情,我总是会在顶点之间得到插值颜色。有没有解决的办法?(如果我可以使用四边形获得相同的结果会更好)

谢谢

4

1 回答 1

1

如果您不希望图元内的顶点属性之间的插值(例如,在您的情况下为线段中的颜色),则需要两次传递相同的颜色,因此最终复制几何:

 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拓扑,因为您不想在原语中共享属性。

于 2010-04-21T21:13:33.637 回答