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

但这不起作用。什么?逻辑在哪里?我需要在 for 循环中插入另一个代码以输出文本:

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

但我不能插入它,因为 beetwen 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 回答