1

ポリゴンごとにボックスの色を変えます。

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と表示されます。

4

2 に答える 2

1

GL_POLYGONを使用しています。これは、凸面の同一平面上のプリミティブに対してのみ機能します。描画しているのは、通常のグリッド上の頂点の束であり、エッジを四角形で接続しています。これは明らかにこれらの制約を満たしていません。また、トポロジを完全に台無しにします。簡単な修正:GL_POLYGONをGL_QUADSに置き換えます。

ああ、そもそもイミディエイトモード(glBegin…glEndを知っている)を使うべきではありません。それは15年以上もの間時代遅れになっています(20に近づいています)。

于 2013-02-15T20:22:20.330 に答える
1

私は最初にあなたのコードを試しましたが、あなたと同じ問題を見つけました。glBegin()とglEndをこのように2番目のforループ内に保持すると、各ループでポリゴンを描画して次のループを開始し、ここで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 に答える