我是每个多边形的替代方框颜色。
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
答案 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();