1

I am to alternative box color for each polygon.

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();

}

work fine with single color, but when i render code it shows http://s11.postimage.org/3ms3mmc4j/box.png

4

2 回答 2

1

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

哦,你一开始就不应该使用立即模式(你知道 glBegin ... glEnd)。它已经过时了超过 15 年(接近 20 年)。

于 2013-02-15T20:22:20.330 回答
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();
于 2013-02-15T21:17:49.870 回答