Управление размерами точки
По умолчанию, размер точки, толщина линии в примитивах соответствует одному пикселю на экране, линия всегда непрерывная. Но эти параметры в OpenGL можно изменять. Рассмотрим некоторые команды, предназначенные для этой цели.
Размер точки можно легко изменить командой - void glPoint-Size(GLfloat size), где параметр size задает размер "квадрата" точки в пикселях. Дело в том, что при большом увеличении точки можно увидеть ее квадратность. Если данный параметр имеет значение 2, то точка будет выглядеть как квадрат 2x2. Для сглаживания углов "квадрата" точки больших размеров используется команда glEnable(GL_POINT_SMOOTH), которая включает антиалиасинг точки. Выключение антиалиасинга для точки осуществляется командой glDisable с параметром (GL_POINT_SMOOTH). По умолчанию антиалиасинг выключен.
Вот как выглядит фрагмент программы рисования "круглой" точки размером 3 пикселя:
glEnable(GL_POINTS); И Будем работать с точкой glEnable(GL_POINT_SMOOTH); // Разрешаем антиалиасинг точки glPointSize(3.0); И Задаем размер точки
glBegin(GL_POINTS); // Определяем координаты рисования
glVertex2i(100,100);
glEnd();
glDisable(GL_POINT_SMOOTH); // Запрещает антиалиасинг точки
Управление толщиной и шаблоном линии
По умолчанию толщина линии в примитивах соответствует одному пикселю на экране, линия всегда непрерывная. Эти параметры в OpenGL можно изменять. Рассмотрим некоторые команды, предназначенные для этой цели.
Толщина линии задается командой void glLineWidth (GLfloat width) Параметр width задает в пикселях толщину линии и должен быть больше (O.Of).
Как и в случае с точкой, мы можем включать или выключать сглаживание линии командами glEnable/glDisable с параметром GL_LINE_SMOOTH. Внимание1. Если не включать сглаживание линии, а этот режим является базовым по умолчанию, то толщина линии будет визуально изменяться в зависимости от угла наклона.
Дело в том, что в этом режиме толщина линии определяется вдоль оси у, если 1у 1 - у21 < Ixi - х21 (где (xi, уО и (х2, у2) - координаты концов отрезка) и в направлении оси х в ситуации lyi - у21 > Lxi - х21. А в случае сглаживания толщина линии замеряется перпендикулярно линии.
Если требуется рисовать линию фрагментарно, т.е. не непрерывно, то для этой цели используют шаблоны. Шаблон линии задается командой:
void glLineStipple (Glint factor, GLushort pattern)
Параметр pattern - это и есть шаблон 16-точечного фрагмента линии, который состоит из серии нулей и единиц. Единица означает, что соответствующая точка линии будет нарисована на экране, ноль означает, что точка нарисована не будет. Запись шаблона начинается с младшего бита параметра pattern. Например, шаблон вида OxOOFF запретит выводить первые восемь точек отреза линии, после чего будет разрешено выводить восемь точек, и так до конца линии. К шаблону можно применить масштабирование (в сторону увеличения), это определяется параметром factor. Если factor равен 2, то каждый бит шаблона при наложении на отрезок будет представлен двумя точками, идущими друг за другом. Например, если в шаблоне встречаются подряд две единицы, а затем три нуля и factor равен 2, то шаблон этот фрагмент рассматривает как содержащий 4 единицы и 6 нулей. Максимальное увеличение шаблона ограничено числом 256. Использование команды glLineStippleQ должно быть разрешено командой glEnable() с параметром GL_LINE_STIPPLE. Команда glDisable() с этим же параметром запрещает работу с шаблоном.
Рассмотрим пример построения линии, состоящей из повторяющихся точек через одну. Для этого потребуется шаблон ОхАААА:
glLineStipple(l,OxAAAA); // Задаем шаблон с масштабом 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(l,OxAAAA) заменить масштабный множитель шаблона 1 на значение 20 (glLineStipple(20,0xAAAA)), то на экране вместо точек увидим отрезки прямых длиной в 20 пикселей.