Перейти к содержанию

GlBegin

Материал из Викиучебника — открытых книг для открытого мира

glBegin - (Функция библиотеки OpenGL) определяет границы, внутри которых заданы вершины примитива или группы примитивов.работает с буфером накопления.

Синтаксис

[править]
void glBegin(
  GLenum mode
);

Параметры

[править]

mode

Режим, задающий тип примитива или примитивов, которые будут созданы из вершин, заключённых между вызовом glBegin и последующим вызовом glEnd. Ниже представлены допустимые символьные константы, возможные в качестве данного параметра:

GL_POINTS

Рассматривает последующие вершины, как точки. n-я вершина определяет n-ю точку. Нарисуется N точек.

GL_LINES

Каждая пара вершин является отрезком. Вершины 2n−1 и 2n определяют n-ю вершину. Нарисуется N/2 линий.

GL_LINE_STRIP

Нарисуется группа отрезков соединяющая все вершины от первой до последней. n-я и (n+1)-я вершины определяют n-ю линию. Нарисуется N−1 линия.

GL_LINE_LOOP

Нарисуется группа отрезков, соединяющая все вершины от первой до последней, и отрезок, соединяющий последнюю вершину с первой. n-я и (n+1)-я вершины определяют n-ю линию. Однако последняя линия будет определена N-ой вершиной и первой вершиной. Нарисуется N линий.

GL_TRIANGLES

Каждая тройка вершин трактуется, как отдельный треугольник. n-й треугольник определяют вершины с порядковыми номерами (3n−2), (3n−1) и 3n. Всего нарисуется N/3 треугольников.

GL_TRIANGLE_STRIP

Нарисуется группа соединённых треугольников. После первых двух вершин, каждая последующая вершина будет добавлять один треугольник. Для нечётных n — n-й треугольник определяют вершины n, n+1 и n+2, для чётных — n+1, n и n+2. Нарисуется N−2 треугольников.

GL_TRIANGLE_FAN

Нарисуется группа соединённых треугольников. После первых двух вершин, каждая последующая вершина будет добавлять один треугольник. n-й треугольник будут задавать вершины с порядковыми номерами 1, n+1 и n+2. Нарисуется N−2 треугольников.

GL_QUADS

Каждые четыре вершины определяют четырёхугольник. Вершины 4n−3, 4n−2, 4n−1 и 4n определяют n-й четырёхугольник. Всего нарисуется N/4 четырёхугольника.

GL_QUAD_STRIP

Нарисуется группа соединённых четырёхугольников. После первых двух вершин, каждая последующая пара вершин будет добавлять один четырёхугольник. n-й четырехугольник будут задавать вершины с порядковыми номерами 2n−1, 2n, 2n+2 и 2n+1. Нарисуется N/2−1 четырёхугольника. Заметьте, что порядок вершин, который используется для вершин при GL_QUAD_STRIP отличается от порядка вершин в случае GL_QUADS.

GL_POLYGON

Нарисуется один выпуклый полигон. Вершины с первой по N-ю определяют этот полигон.

Пояснения

[править]

Функции glBegin и glEnd определяют границы, внутри которых заданы вершины примитива или группы примитивов. Функция glBegin имеет единственный аргумент, определяющий какой тип примитива будут составлять вершины. n принимается за порядковый номер вершины, начиная с первой, и N — за общее число указанных вершин, также трактуется следующее:

  • Между функциями glBegin и glEnd вы можете использовать только определённый поднабор функций OpenGL:
 glVertex 
 glColor 
 glSecondaryColor 
 glIndex 
 glNormal 
 glTexCoord 
 glMultiTexCoord 
 glFogCoord 
 glEvalCoord 
 glEvalPoint 
 glMaterial 
 glEdgeFlag
Вы можете также использовать glCallList или glCallLists для исполнения дисплейных списков,
которые  включают в себя только упомянутые выше функции. Если между glBegin и glEnd вызвана какая 
то другая функция из OpenGL, то она игнорируется, и устанавливается флаг соответствующей ошибки.
  • Независимо от выбранного значения для mode в glBegin, количество вершин, которые могут быть заданы между glBegin и glEnd, ничем не ограничено. Линии, треугольники, четырёхугольники и полигоны, которые не полностью определены, — не рисуются. Это случается, когда задано вершин меньше, чем требуется для вывода одного или нескольких примитивов. Не полностью определённые примитивы игнорируются, остальные рисуются.
  • Для каждого примитива установлено минимальное количество вершин.
Минимальное число вершин Тип примитива
1 точка
2 линия
3 треугольник
4 четырёхугольник
3 полигон

Режимы, требующие несколько вершин для каждого следующего примитива: GL_LINES (2), GL_TRIANGLES (3), GL_QUADS (4) и GL_QUAD_STRIP (2).

Коды ошибок

[править]

Ниже представлены пояснения к кодам возможных ошибок.

Код ошибки Пояснение
GL_INVALID_ENUM mode установлен в недопустимое значение.
GL_INVALID_OPERATION Между glBegin и glEnd была вызвана недопустимая функция.

Функция glEnd была вызвана перед соответствующей функцией glBegin, или glBegin была вызвана внутри glBegin/glEnd.