OpenGL. Компьютерная графика. Васильев С.А. - 13 стр.

UptoLike

Составители: 

15
glDisable(GL_POINT_SMOOTH); // Запрещает антиалиасинг точки
5.4 Управление толщиной и шаблоном линии
По умолчанию, толщина линии в примитивах соответствует одному пикселю на экране, линия все-
гда непрерывная. Эти параметры в OpenGL можно изменять. Рассмотрим некоторые команды предна-
значенные для этой цели.
Толщина линии задается командой void glLineWidth (GLfloat width)
Параметр width задает в пикселях толщину линии и должен быть больше (0.0f).
Как и в случае с точкой, мы можем включать или выключать сглаживание линии командами glE-
nable/glDisable с параметром GL_LINE_SMOOTH. Внимание! Если не включать сглаживание линии,
а этот режим является базовым по умолчанию, то толщина линии будет визуально изменяться в зависи-
мости от угла наклона.
Дело в том, что в этом режиме толщина линии определяется вдоль оси y, если |y
1
y
2
| < |x
1
x
2
| (где
(x
1
, y
1
) и (x
2
, y
2
) координаты концов отрезка) и в направлении оси x в ситуации |y
1
y
2
| > |x
1
x
2
|. А в
случае сглаживания толщина линии замеряется перпендикулярно линии.
Если требуется рисовать линию фрагментарно, т.е. не непрерывно, то для это цели используют
шаблоны. Шаблон линии задается командой:
void glLineStipple (Glint factor, GLushort pattern)
Параметр pattern это и есть шаблон 16-точечного фрагмента линии, который состоит из серии ну-
лей и единиц. Единица означает, что соответствующая точка линии будет нарисована на экране, ноль
означает, что точка нарисована не будет. Запись шаблона начинается с младшего бита параметра
pattern. Например, шаблон вида 0x00FF запретит выводить первые восемь точек отреза линии, после
чего будет разрешено выводить восемь точек, и так до конца линии. К шаблону можно применит мас-
штабирование сторону увеличения), это определяется параметром factor. Если factor равен 2, то каж-
дый бит шаблона при наложении на отрезок будет представлен двумя точками идущих друг за другом.
Например, если в шаблоне встречаются подряд две единицы, а затем три нуля и factor равен 2, то шаблон
этот фрагмент рассматриваться как содержащий 4 единицы и 6 нулей. Максимальное увеличение шаб-
лона ограничено числом 256. Использование команды glLineStipple() должно быть разрешено командой
glEnable()с параметром GL_LINE_STIPPLE. Команда glDisable() с этим же параметром запрещает ра-
боту с шаблоном.
Рассмотрим пример построения линии состоящей из повторяющихся точек через одну. Для этого
потребуется шаблон 0xAAAA:
glLineStipple(1,0xAAAA); // Задаем шаблон с масштабом 1
glEnable(GL_LINE_STIPPLE); // Разрешаем работу шаблоном
glEnable(GL_LINES);
glBegin(GL_LINES);
glColor3f(1.0f,1.0f,0.0f);
glVertex2i(40,120);
glVertex2i(240,120);
glEnd();
glDisable(GL_LINES);
glDisable(GL_LINES_STIPPLE); // Запрещаем работу с шаблоном
Если в приведенном примере в команде glLineStipple(1,0xAAAA) заменить масштабный множитель
шаблона 1 на значение 20 (glLineStipple(20,0xAAAA)), то на экране вместо точек увидим отрезки пря-
мых длиной в 20 пиксель.
5.5 Грани плоских многоугольников
Каждый плоский многоугольник имеет две стороны лицевую и обратную. Если посмотреть на по-
верхность многоугольника и описать его списком вершин обходя многоугольник против хода часовой
стрелки, то такая грань называется лицевая. В противном случае обратная. Очевидно, что лишь одна
грань многоугольника может быть видна. Чтобы не делать лишней работы на невидимых гранях объек-
та необходимо эту ситуацию отслеживать. По умолчанию в OpenGL считается, что многоугольник зада-
ется вершинами против часовой стрелки. Но это правило можно изменить командой
void glFrontFace (GLenum mode)
Значением параметра mode можно изменять правило задания вершин для лицевых граней. Если этот