Chapter 3
Рисуем простые объекты

3.4  Треугольники

     Для треугольника можно задавать те же параметры, что и для линии, плюс есть еще одна функция glPolygonMode. Она устанавливает опции для отрисовки многоугольника. Первый параметр может принимать значения - GL_FRONT, GL_BACK и GL_FRONT_AND_BACK. Второй параметр указывает, как будет рисоваться многоугольник. Он принимает значения: GL_POINT(рисуются только точки), GL_LINE(рисуем линии) и GL_FILL(рисуем заполненный многоугольник). Первый параметр указывает: к лицевой, тыльной или же к обеим сторонам применяется опция, заданная вторым параметром. Треугольники можно рисовать, передав GL_TRIANGLE_STRIP или GL_TRIANGLE_FAN в glBegin. В первом случае, первая, вторая и третья вершины задают первый треугольник. Вторая, третья и четвертая вершина - второй треугольник. Третья, четвертая и пятая вершина - третий треугольник и т.д. Вершины n, n+1 и n+2 определят n-ый треугольник. Во втором случае, первая, вторая и третья вершина задают первый треугольник. Первая, третья и четвертая вершины задают второй треугольник и т.д. Вершины 1, n+1, n+2 определяют n-ый треугольник. Далее следует пример с комментариями.

glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); // см. выше
 glBegin(GL_TRIANGLES);
  glColor3d(1,0,0);      // рисуем треугольник
  glVertex3d(-4,2,0);
  glVertex3d(-3,2.9,0);
  glVertex3d(-2,2,0);
 glEnd();


glLineWidth(2);
 glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); //рисуем
                             // проволочные треугольники

 glBegin(GL_TRIANGLE_STRIP); // обратите внимание на порядок
                             // вершин
  glColor3d(0,1,0);
  glVertex3d(1,2,0);
  glVertex3d(0,2.9,0);
  glVertex3d(-1,2,0);
  glVertex3d(0,1.1,0);
 glEnd();


 glEnable(GL_LINE_STIPPLE);
 glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
 glBegin(GL_TRIANGLE_FAN);
  glColor3d(0,0,1);
  glVertex3d(4,2,0);
  glVertex3d(2.6,2.8,0);
  glVertex3d(2,2,0);
  glVertex3d(3,1.1,0);
 glEnd();


 glDisable(GL_LINE_STIPPLE);