2013-06-22 5 views
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(); 

Этот код является работой. Но ...OpenGL & C++: glBegin/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(); 
     } 

Но это не сработает. WTF? Где логика? мне нужно вставить другой код в течение цикла для текста из:

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

Используйте [вершинная массивы] (HTTP: // WWW. songho.ca/opengl/gl_vertexarray.html) –

+0

Не используйте glBegin/glEnd и остальную часть старого конвейера ... это уже не хорошая практика ... – dtech

ответ

2

Каждый раз, когда вы звоните glBegin(GL_TRIANGLE_STRIP);, вы начинаете новый треугольник. Он не будет связан с другими вершинами из предыдущих итераций цикла for.

+0

Большое спасибо! – user2254511

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
+0

Большое спасибо! – user2254511