Opengl 光滑的颜色,带有GL_四边形条

Opengl 光滑的颜色,带有GL_四边形条,opengl,Opengl,我正在尝试用OpenGL绘制这个颜色图 使用四边形时,结果看起来很好: int colorArr[] = { 255, 224, 192, 160, 128, 96, 64, 32 }; gluOrtho2D(-2, 2, -2, 2); glPolygonMode(GL_FRONT, GL_FILL); glDisable(GL_COLOR_LOGIC_OP); glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_QUADS); for (int i = 0;

我正在尝试用OpenGL绘制这个颜色图

使用四边形时,结果看起来很好:

int colorArr[] = { 255, 224, 192, 160, 128, 96, 64, 32 };
gluOrtho2D(-2, 2, -2, 2);
glPolygonMode(GL_FRONT, GL_FILL);

glDisable(GL_COLOR_LOGIC_OP);
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_QUADS);
for (int i = 0; i < 8; i++) {
    glColor3ub(colorArr[7 - i], 0, 0);
    glVertex2f(-4, i - 4);
    glVertex2f(4, i - 4);
    glVertex2f(4, i - 4 + 1);
    glVertex2f(-4, i - 4 + 1);
}
glEnd();

glEnable(GL_COLOR_LOGIC_OP);
glLogicOp(GL_OR);

glBegin(GL_QUADS);
for (int i = 0; i < 8; i++) {
    glColor3ub(0, colorArr[i], 0);
    glVertex2f(i - 4, 4);
    glVertex2f(i - 4, -4);
    glVertex2f(i - 4 + 1, -4);
    glVertex2f(i - 4 + 1, 4);
}
glEnd();

glFlush();
intcolorarr[]={255、224、192、160、128、96、64、32};
gluOrtho2D(-2,2,-2,2);
glPolygonMode(GL_前端,GL_填充);
glDisable(GLU颜色逻辑运算);
glClear(GLU颜色缓冲位);
glBegin(GL_QUADS);
对于(int i=0;i<8;i++){
glColor3ub(colorArr[7-i],0,0);
glVertex2f(-4,i-4);
glVertex2f(4,i-4);
glVertex2f(4,i-4+1);
glVertex2f(-4,i-4+1);
}
格伦德();
glEnable(GL_颜色_逻辑_操作);
glLogicOp(GLU或);
glBegin(GL_QUADS);
对于(int i=0;i<8;i++){
glColor3ub(0,colorArr[i],0);
glVertex2f(i-4,4);
glVertex2f(i-4,-4);
glVertex2f(i-4+1-4);
glVertex2f(i-4+1,4);
}
格伦德();
glFlush();
但如果我使用四边形条绘制多边形,线之间的颜色会变得平滑:

int colorArr[] = { 255, 224, 192, 160, 128, 96, 64, 32 };
gluOrtho2D(-2, 2, -2, 2);
glPolygonMode(GL_FRONT, GL_FILL);

glDisable(GL_COLOR_LOGIC_OP);
glClear(GL_COLOR_BUFFER_BIT);

glBegin(GL_QUAD_STRIP);
for (int i = 0; i < 8; i++) {
    glColor3ub(colorArr[7 - i], 0, 0);
    glVertex2f(-4, i - 4);
    glVertex2f(4, i - 4);
}
glVertex2f(-4, 4);
glVertex2f(4, 4);
glEnd();

glEnable(GL_COLOR_LOGIC_OP);
glLogicOp(GL_OR);

glBegin(GL_QUAD_STRIP);
for (int i = 0; i < 8; i++) {
    glColor3ub(0, colorArr[i], 0);
    glVertex2f(i - 4, 4);
    glVertex2f(i - 4, -4);
}
glVertex2f(4, 4);
glVertex2f(4, -4);
glEnd();
glFlush();
intcolorarr[]={255、224、192、160、128、96、64、32};
gluOrtho2D(-2,2,-2,2);
glPolygonMode(GL_前端,GL_填充);
glDisable(GLU颜色逻辑运算);
glClear(GLU颜色缓冲位);
glBegin(GLU四条带);
对于(int i=0;i<8;i++){
glColor3ub(colorArr[7-i],0,0);
glVertex2f(-4,i-4);
glVertex2f(4,i-4);
}
glVertex2f(-4,4);
glVertex2f(4,4);
格伦德();
glEnable(GL_颜色_逻辑_操作);
glLogicOp(GLU或);
glBegin(GLU四条带);
对于(int i=0;i<8;i++){
glColor3ub(0,colorArr[i],0);
glVertex2f(i-4,4);
glVertex2f(i-4,-4);
}
glVertex2f(4,4);
glVertex2f(4,-4);
格伦德();
glFlush();

你知道这是为什么吗?

你正在绘制的四边形条等同于:

glBegin(GL_QUADS);
for (int i = 0; i < 7; i++) {
    glColor3ub(colorArr[7 - i], 0, 0);
    glVertex2f(-4, i - 4);
    glVertex2f(4, i - 4);
    glColor3ub(colorArr[7 - i+1], 0, 0);
    glVertex2f(4, i - 4 + 1);
    glVertex2f(-4, i - 4 + 1);
}
glBegin(GL_四边形);
对于(int i=0;i<7;i++){
glColor3ub(colorArr[7-i],0,0);
glVertex2f(-4,i-4);
glVertex2f(4,i-4);
glColor3ub(colorArr[7-i+1],0,0);
glVertex2f(4,i-4+1);
glVertex2f(-4,i-4+1);
}
每两个顶点更改一次颜色,颜色作为属性插值到下一个/上一个点