使用glColor3f()打开OpenGL GL_QUAD_STRIP

时间:2011-03-26 04:07:44

标签: opengl

我用glColor3f()和GL_QUAD_STRIP绘制了彼此相邻的2个正方形,但似乎它们正在淡化2个正方形之间的颜色,有什么方法可以防止这种情况吗?或者GL_QUAD_STRIP是不是意味着这种事情?更合适的是GL_QUADS,但这太容易了。

glBegin(GL_QUAD_STRIP);

glColor3f(1.0f, 1.0f, 1.0f);
glVertex3f(0.0f, 0.0f, 0.0f);
glVertex3f(0.0f, 1.0f, 0.0f);
glVertex3f(1.0f, 0.0f, 0.0f);
glVertex3f(1.0f, 1.0f, 0.0f);
glColor3f(0.0f, 0.0f, 0.0f);
glVertex3f(2.0f, 0.0f, 0.0f);
glVertex3f(2.0f, 1.0f, 0.0f);
glColor3f(1.0f, 1.0f, 1.0f);

glEnd();

2 个答案:

答案 0 :(得分:7)

通常,颜色附加到每个顶点,而不是每个四边形。因此,由于两个顶点在条带的两个四边形之间共享,因此您可以获得两种颜色(以及您正在观察的“淡化”。它称为插值)。

现在,在您的特定情况下,存在一个OpenGL模式,它有助于:您可以告诉OpenGL根本不插入颜色,并且只获取每个基元的最后一个顶点的颜色(此处为四边形)原语。

这是通过the following state完成的:

glShadeModel(GL_FLAT);

答案 1 :(得分:0)

每次进行glColor3f调用时,它会将该颜色与每个顶点关联,直到您使用不同颜色进行不同的glColor3f调用调用。我会使用GL_QUADS并将其分解为两个单独的四边形(顺时针顺序,我相信):

glBegin(GL_QUADS);

glColor3f(1.0f, 1.0f, 1.0f);
glVertex3f(0.0f, 0.0f, 0.0f);
glVertex3f(0.0f, 1.0f, 0.0f);
glVertex3f(1.0f, 1.0f, 0.0f);
glVertex3f(1.0f, 0.0f, 0.0f);

glColor3f(0.0f, 0.0f, 0.0f);
glVertex3f(1.0f, 0.0f, 0.0f);
glVertex3f(1.0f, 1.0f, 0.0f);
glVertex3f(2.0f, 1.0f, 0.0f);
glVertex3f(2.0f, 0.0f, 0.0f);

glEnd();