openGL gl_Polygon混合颜色问题

时间:2018-10-21 08:10:25

标签: opengl

我想用两个不同的颜色在左侧绘制一个矩形,在右侧绘制一个矩形,但是在绘制两个GL_Polygon之后。图像变成这样,有人可以帮我吗? 谢谢。

{
    GLfloat rectangleB[5][3]={{10,0,0},{10,30,0},{5,30,0},{1,30,0},{1,0,0}};
    GLfloat rectangleW[5][3]={{0,0,0},{0,30,0},{-5,30,0},{-10,30,0},{-10,0,0}};
    GLfloat rectangleY[5][3]={{8,2,0},{5,28,0},{0,28,0},{-8,28,0},{-8,2,0}};

    void draw_Rectangle(void){

    glBegin(GL_POLYGON);
    for(int i=0;i<5;i++){
        glVertex3fv(rectangleB[i]);
        glColor3f(0.0, 0.0, 1.0);
    }
    glEnd();

    glBegin(GL_POLYGON);
    for(int i=0;i<5;i++){
        glVertex3fv(rectangleW[i]);
        glColor3f(1.0, 1.0, 1.0);
    }
    glEnd();


    glFlush();
}

这是输出图像

这是我想要的图像

1 个答案:

答案 0 :(得分:2)

首先要注意的是,自glBegin / glEnd序列开始绘制以来已经有好几年了。 阅读有关Fixed Function Pipeline的信息,并参阅Vertex SpecificationShader了解最新的渲染方式。


无论如何,glVertex用于指定glBegin/glEnd序列中的下一个顶点坐标。
调用glVertex时,当前颜色属性(glColor)与顶点坐标关联。

这意味着必须在之前设置颜色,然后再指定顶点坐标。交换glColor3fglVertex3fv以解决您的问题:

glBegin(GL_POLYGON);
for(int i=0;i<5;i++){
    glColor3f(0.0, 0.0, 1.0);
    glVertex3fv(rectangleB[i]);
}
glEnd();

glBegin(GL_POLYGON);
for(int i=0;i<5;i++){
    glColor3f(1.0, 1.0, 1.0);
    glVertex3fv(rectangleW[i]);
}
glEnd();