使用POLYGON创建盒子的替代颜色

时间:2013-02-15 19:07:04

标签: opengl

我是每个多边形的替代方框颜色。

void display(void){
    glClear(GL_COLOR_BUFFER_BIT);

    int evenoddcheck = 0;
    int height = 50;
    int width = 100;

    glBegin(GL_POLYGON);
    for( int a=0 ; a <= 1000 ; a=a+100 ) 
    {
        for( int b=0 ; b <= 500 ; b=b+50 ) 
        {
            if( evenoddcheck % 2 == 0 )
            {
                glColor3f(0.0f,0.0f,0.0f);          
            }
            else {
                glColor3f(1.0f,1.0f,1.0f);          
            }

            glVertex2i(b,a);
            glVertex2i(b,width+a);
            glVertex2i(height+b,width+a);
            glVertex2i(height+b,a);
            evenoddcheck++;
        }
    }

    glEnd();
    glFlush();

}

使用单色工作正常,但当我呈现代码时,它会显示 http://s11.postimage.org/3ms3mmc4j/box.png

2 个答案:

答案 0 :(得分:1)

您正在使用GL_POLYGON,它仅适用于凸面,共面基元。您绘制的是一组规则网格上的顶点,通过四边形连接边缘:这显然不符合这些约束;它也完全扰乱了你的拓扑结构。简单修复:将GL_POLYGON替换为GL_QUADS。

哦,你不应该首先使用立即模式(你知道glBegin ... glEnd)。现在已经超过15年了(接近20年)。

答案 1 :(得分:1)

我首先尝试了你的代码我也发现了和你一样的问题。我将glBegin()和glEnd保留在第二个for循环中,然后它工作正常,因为在每个循环中你绘制ploygon并启动下一个所以在这里你可以使用GL_POLYGON。但是在@dantenwolf所描述的代码中,使用GL_POLYGON无法获得正确的结果,您必须使用GL_QUADS。

for( int a=0 ; a <= 100 ; a=a+10 )
{        for( int b=0 ; b <= 50 ; b=b+5 ).
    {

        glBegin(GL_POLYGON);
        if( evenoddcheck % 2 == 0 )
        {
            glColor3f(0.0f,0.0f,0.0f);
        }
        else {
            glColor3f(1.0f,1.0f,1.0f);
        }

        glVertex2i(b,a);
        glVertex2i(b,width+a);
        glVertex2i(height+b,width+a);
        glVertex2i(height+b,a);
        glEnd();

        evenoddcheck++;
    }
}
glFlush();
相关问题