OpenGL& C ++:glBegin / glEnd

时间:2013-06-22 20:18:04

标签: c++ opengl

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

但是我不能插入它,因为beetwen glBegin(GL_TRIANGLE_STRIP)和glEnd()它不起作用。我不能在循环内写glBegin(GL_TRIANGLE_STRIP),glEnd(),因为它在那里不起作用。

2 个答案:

答案 0 :(得分:2)

每次拨打glBegin(GL_TRIANGLE_STRIP);时,您都会开始一个全新的三角形条带。它不会连接到for循环的前一次迭代中的其他顶点。

答案 1 :(得分:1)

来自glBegin

的文档
  

“...未绘制未完全指定的线条,三角形,四边形和多边形。当提供的顶点太少而无法指定单个图元或指定了不正确的顶点倍数时,会产生不完整的规范。不完整的原语被忽略;其余的被绘制出来......“

您需要在glBegin / glEnd对之间指定最小数量的顶点;数字取决于您提供给glBegin的参数。

  1. GL_POINTS:1
  2. GL_LINESGL_LINE_*:2
  3. GL_TRIANGLESGL_TRIANGLE_*:3
  4. GL_QUADSGL_QUAD_*:4