1
          glBegin(GL_TRIANGLE_STRIP);
        for(i; i <= degree; i++)
        {
            float 
            sunX=-200/2*cos(i*M_PI/180),
            sunZ=200/2*sin(i*M_PI/180);

            glVertex3f(0, 0, 0);
            glVertex3f(sunX, 0, sunZ);
        }
        glEnd();

このコードは機能します。しかし...

for(i; i <= degree; i++)
        {
            float 
            sunX=-200/2*cos(i*M_PI/180),
            sunZ=200/2*sin(i*M_PI/180);
                            glBegin(GL_TRIANGLE_STRIP);
            glVertex3f(0, 0, 0);
            glVertex3f(sunX, 0, sunZ);
                            glEnd();
        }

しかし、これはうまくいきません。え?論理はどこに?テキスト出力のサイクル用に別のコードを挿入する必要があります。

glPushAttrib(GL_LIST_BIT);
glListBase(1000);
glCallLists(strlen(text), GL_UNSIGNED_BYTE, text);
glPopAttrib();

しかし、glBegin(GL_TRIANGLE_STRIP) と glEnd() の間では機能しないため、挿入できません。そして、そこでは機能しないため、glBegin(GL_TRIANGLE_STRIP)、glEnd() をサイクル内に書き込むことはできません。

4

2 に答える 2

3

あなたが電話するたびにglBegin(GL_TRIANGLE_STRIP);、あなたは真新しい三角形のストリップを始めています. for ループの前の反復からの他の頂点には接続されません。

于 2013-06-22T20:23:41.803 に答える
1

glBeginのドキュメントから

「…不完全に指定された線、三角形、四角形、および多角形は描画されません。不完全な指定は、単一のプリミティブを指定するために提供される頂点が少なすぎる場合、または誤った複数の頂点が指定された場合に発生します。不完全なプリミティブは無視されます。残りは描画されます...」

glBegin/glEnd ペア間の頂点の最小数を指定する必要があります。この数は、glBegin に指定するパラメーターによって異なります。

  1. GL_POINTS: 1
  2. GL_LINES, GL_LINE_*: 2
  3. GL_TRIANGLES, GL_TRIANGLE_*: 3
  4. GL_QUADS, GL_QUAD_*: 4
于 2013-06-22T20:30:24.860 に答える