Chapter 3
Рисуем простые объекты
Для линий вы также можете изменять ширину, цвет, размер, сглаживание.
Если вы зададите разные цвета для начала и конца линии, то ее цвет будет переливающимся.
OpenGL по умолчанию делает интерполяцию. Так же вы можете рисовать прерывистые
линии, делается это путем наложения маски при помощи следующей функции:
void glLineStipple(GLint factor, GLushort pattern );
Второй параметр задает саму маску. Например, если его значение равно 255(0x00FF),
то, чтобы вычислить задаваемую маску, воспользуемся калькулятором.
В двоичном виде это число выглядит так: 0000000011111111, т.е. всего 16 бит.
Старшие восемь установлены в ноль, значит тут линии не будет. Младшие установлены в
единицу, тут будет рисоваться линия. Первый параметр определяет, сколько
раз повторяется каждый бит. Скажем, если его установить равным 2, то накладываемая
маска будет выглядить так:
00000000000000001111111111111111
Далее приведен исходный текст с комментариями для наглядной демонстрации, что к чему.
glLineWidth(1); // ширину линии
// устанавливаем 1
glBegin(GL_LINES);
glColor3d(1,0,0); // красный цвет
glVertex3d(-4.5,3,0); // первая линия
glVertex3d(-3,3,0);
glColor3d(0,1,0); // зеленый
glVertex3d(-3,3.3,0); // вторая линия
glVertex3d(-4,3.4,0);
glEnd();
glLineWidth(3); // ширина 3
glBegin(GL_LINE_STRIP); // см. ниже
glColor3d(1,0,0);
glVertex3d(-2.7,3,0);
glVertex3d(-1,3,0);
glColor3d(0,1,0);
glVertex3d(-1.5,3.3,0);
glColor3d(0,0,1);
glVertex3d(-1,3.5,0);
glEnd();
glLineWidth(5);
glEnable(GL_LINE_SMOOTH);
glEnable(GL_LINE_STIPPLE); // разрешаем рисовать
// прерывистую линию
glLineStipple(2,58360); // устанавливаем маску
// пояснения см. ниже
glBegin(GL_LINE_LOOP);
glColor3d(1,0,0);
glVertex3d(1,3,0);
glVertex3d(4,3,0);
glColor3d(0,1,0);
glVertex3d(3,2.7,0);
glColor3d(0,0,1);
glVertex3d(2.5,3.7,0);
glEnd();
glDisable(GL_LINE_SMOOTH);
glDisable(GL_LINE_STIPPLE);
|