В третьей главе мы узнали, как рисовать треугольники в OpenGL. Эти треугольники — одни из примитивов OpenGL. Примитивы — это простые фигуры, такие как треугольники, четырехугольники, отрезки и тд. С помощью них можно составлять более сложные объекты.
Отрезок задается двумя вершинами: началом и концом. У треугольника 3 вершины, у четырехугольника — 4, а многоугольник может состоять из бесконечного числа вершин. Подробнее о многоугольниках расскажем позже, сейчас сосредоточимся на простых примитивах.
Отрезок рисуется с помощью glBegin( GL_LINES )
. Пока не встретится glEnd()
, по каждой паре вершин будет чертиться отрезок. Если вы хотите, чтобы конечная вершина одного отрезка была начальной для следующего, используйте glBegin( GL_LINE_STRIP )
.
Как видно справа, нужно 3 вершины при glBegin( GL_LINE_STRIP )
. Треугольники также имеют strip разновидность. В этом случае последние две вершины треугольника являются стартовыми вершинами для следующего.
Треугольники имеют еще один режим рисования, TRIANGLE_FAN
. Fan (веер) использует первую вершину в качестве центра, а остальные вершины располагаются вокруг этого центра.
Теперь — про четырехугольники. Они тоже имеют stripped режим, однако в этом случае они ведут себя не как четырехугольники. Четные вершины рисуются на одной стороне, нечетные — на другой. То есть вершины полосы четырехугольников следует задавать так: v1, v2, v4, v3, v6, v5,.. Поначалу это смущает, но и к этому можно привыкнуть.
В чем преимущества в использовании strip примитивов? Очевидно, что здесь надо задавать меньше вершин. Это значит, что вам потребуется меньше места, а видеокарта обработает ваши объекты быстрее. Поэтому составлять объекты из strip примитивов предпочтительней.
Взгляните на программу пример здесь. Там рисуются все упомянутые здесь примитивы, но не в виде закрашенных областей, а в виде контуров, посредством glPolygonMode(GL_BACK, GL_LINE);
Никакого фокуса, просто так задается вычерчивание контура объекта, вместо закраски его установленным цветом.