【问题标题】:OpenGL & C++ : glBegin/glEndOpenGL 和 C++:glBegin/glEnd
【发布时间】:2013-06-22 20:18:04
【问题描述】:
          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() 循环,因为它在那里不起作用。

【问题讨论】:

  • 不要使用 glBegin/glEnd 和旧管道的其余部分......这不再是一个好习惯......

标签: c++ opengl


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    来自glBegin的文档

    "... 不绘制未完全指定的线、三角形、四边形和多边形。如果提供的顶点太少而无法指定单个图元,或者指定的顶点倍数不正确,则会导致指定不完整​​。不完整的图元被忽略;其余的被绘制。..."

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多