Рисование треугольников.




Типы примитивов

Проще всего рисовать примитивы используя «прямую настройку» (“Immediate Mode”). Для этого используется функция glBegin(), которая принимает один аргумент – тип примитива, который вы хотите нарисовать. Т.е. для включения режима рисования нужного вам примитива достаточно прописать тип этого примитива в функции glBegin().
Список возможных типов:

GL_POINTS Рисует точки на экране. Каждая вершина – обособленная точка.
GL_LINES Рисует на экране отрезки, соединяющие пары вершин (отдельно указывается начало и конец отрезка)
GL_LINE_STRIP Рисует ломаную, соединяя вершины по порядку (конец предыдущего отрезка становится началом следующего)
GL_LINE_LOOP Рисует замкнутую линию на экране. Последняя вершина соединяется с первой.
GL_TRIANGLES Последовательно объединяет тройки вершин в треугольники.
GL_TRIANGLE_STRIP Объединяет тройки вершин в треугольники так, что две последние вершины предыдущего треугольника становятся первыми двумя вершинами нового
GL_TRIANGLE_FAN Соединяет вершины в форме веера
GL_QUADS Последовательно объединяет четверки вершин в четырехугольники
GL_QUAD_STRIP Объединяет четверки вершин в четырехугольники, так, что три последние предыдущего становятся тремя первыми следующего
GL_POLYGON Рисует многоугольник с тем количеством сторон, сколько вам надо

 

После окончания перечисления вершин, описывающих примитив должна идти команда glEnd() – функция, которая заканчивает рисование примитива.

Рисование точек.

Пример простейшего кода рисования точек:

glBegin(GL_POINTS);

glVertex2f(-0.6f, -0.6f);

glVertex2f(-0.2f, 0.6f);

glVertex2f(0.6f, -0.2f);

glEnd();

 

По умолчанию задается стандартный размер точки 1х1 пиксель. Чтобы изменить это существует функция glPointSize(), принимающая в качестве аргумента новый размер точки.

Пример:
glPointSize(10.0f);
glBegin(GL_POINTS);
glVertex2f(-0.6f, -0.6f);
glVertex2f(-0.2f, 0.6f);
glVertex2f(0.6f, -0.2f);
glEnd();

 

 

Рисование линий.

Как было отмечено выше, есть три режима рисования линий. Разберемся с первым из них. При использовании GL_LINE соединяются последовательные пары точек.

Пример:

glBegin(GL_LINES);
glVertex2f(-0.6f, -0.6f);
glVertex2f(-0.2f, 0.6f);
glVertex2f(0.6f, -0.2f);
glVertex2f(0.6f, 0.6f);
glEnd();

 

 

Толщина линий по умолчанию задается единичной, но ее можно изменить с помощью glLineWidth():

glLineWidth(10.0f);
glBegin(GL_LINES);
glVertex2f(-0.6f, -0.6f);
glVertex2f(-0.6f, 0.6f);
glVertex2f(0.6f, -0.2f);
glVertex2f(0.6f, 0.6f);
glEnd();

Второй тип рисования линий – это рисование ломаной линии. При таком подходе конец предыдущего отрезка является началом последующего. Т.е. при таком же перечислении вершин, но при подставлении GL_LINE_STRIP в функцию glBegin() мы получим такую картинку:

GL_LINE_LOOP работает аналогично GL_LINE_STRIP, но еще и соединяет последнюю точку с начальной:

Рисование треугольников.

Пример использования GL_TRIANGLES:


glBegin(GL_TRIANGLES);
glVertex2f(-0.6f, -0.6f);
glVertex2f(-0.2f, 0.6f);
glVertex2f(0.6f, -0.2f);
glEnd();

 

Пример использования GL_TRIANGLE_STRIP:

glBegin(GL_TRIANGLE_STRIP);

glVertex2f(-0.2f, -0.6f);

glVertex2f(-0.6f, 0.2f);

glVertex2f(0.2f, 0.6f);

glVertex2f(0.6f, 0.2f);

glVertex2f(0.6f, -0.2f);

glEnd();

 

Пример использования GL_TRIANGLE_FAN:

glBegin(GL_TRIANGLE_FAN);

glVertex2f(-0.2f, -0.6f);

glVertex2f(-0.6f, 0.2f);

glVertex2f(0.2f, 0.6f);

glVertex2f(0.6f, 0.2f);

glVertex2f(0.6f, -0.2f);

glEnd();

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2022-11-28 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: