Побудова дротяних зображень з застосуванням бібліотеки OpenGL (Лабораторна робота № 2), страница 4

    glColor3d(1,1,1); {Білий колір переднього плану}

    glBegin(GL_LINES);

      glVertex2d(0, -1);      {Початок осі ординат}

      glVertex2d(0, 1);       {Кінець осі ординат}

      glVertex2d(-1, -0);     {Початок осі абсцис}

      glVertex2d(1, 0);       {Кінець осі абсцис}

    glEnd;

    {Виведення на екран відрізка параболи}

    glColor3d(1,0,0); {Червоний колір переднього плану}

    glBegin(GL_LINE_STRIP); {Початок ламаної лінії}

     x:=-1;                   {Абсциса початкової точки}

     repeat

y:=sqr(x);          {Ордината поточної точки}

          glVertex2d(x, y);   {Додавання поточної точки як вузла

 до ламаної лінії}

          x:=x+0.1;           {Зсув абсциси поточної точки}

     until x>=1; 

    glEnd; {Кінець ламаної лінії}

При виконанні наведеного фрагменту слід створити в розділі var поточної процедури змінні x та y типу double.

          Примітив GL_LINE_LOOP  представляє собою замкнуту ламану лінію і відрізняється від попереднього, тим що до лінії автоматично додається сегмент, який з’єднує першу і останню вершини ламаної лінії. 

Як вже зазначалося, для формування повноцінних дротяних зображень необхідно крім засобів управління кольором та координатами примітивів (ліній) також мати засоби управління товщиною ліній та шаблоном їх заповнення.  До таких засобів в бібліотеці Open GL відносяться процедури glLineWidth та glLineStipple.

Управління товщиною ліній здійснюється за допомогою процедури

glLineWidth(Товщина_Лінії);

де параметр Товщина_Лінії  це змінна або константа дійсного типу, що визначає товщину лінії в пікселях. Бібліотека Open GL реалізує два режими виводу ліній з згладжуванням контурних нерівностей та без згладжування. Перший режим дає більш якісні зображення, однак сповільнює побудову зображень. Включення / виключення  режиму згладжування здійснюється командами:

glEnable(GL_LINE_SMOOTH);   {Включення згладжування нерівностей}

glDisable(GL_LINE_SMOOTH);   {Включення згладжування нерівностей }

При відключеному режимі згладжування дійсні значення товщини лінії округляються до найближчого цілого. В іншому випадку товщина лінії в пікселях обчислюється в кожному конкретному випадку і залежить від радіуса кривизни апроксимованої лінії та інш. Режим згладжування робить ламану лінію візуально ближчою до кривої.

Для управління шаблоном застосовується

glLineStipple(Множник, Шаблон);

де Шаблон – двохбайтна цілочисельна змінна або константа (наприклад типу integer або word) що визначає спосіб заповнення лінії. Кожен з 16 бітів шаблону управляє одним пікселем лінії. Якщо біт шаблону дорівнює одиниці, то піксел зафарбовується кольором переднього плану, якщо біт дорівнює нулеві то піксел зафарбовується кольором фону. Наприклад, якщо необхідно встановити шаблон лінії пунктир з рівними за довжиною штрихами та проміжками можна викликати процедуру glLineStipple з наступними параметрами:

glLineStipple(1, $FF00);

шістнадцяткова константа $FF00 в двійковій системі зчислення має вигляд b11111111111111110000000000000000. Таким чином, половина кожного 16-піксельного сегменту лінії буде зафарбовуватися кольором переднього плану, а половина – кольором фону. Параметр Множник є однобайтним цілим числом і дозволяє скільки разів повторюваатиметься кожен біт шаблона. Наприклад, якщо в попередньому виклику процедури замінити множник на 2

   glLineStipple(2, $FF00);

то довжина штрихів та проміжків лінії збільшиться в 2 рази.

Слід пам’ятати що управління шаблоном лінії функціонує лише після включення відповідного режиму викликом процедури

       glEnable(GL_LINE_STIPPLE);