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

UptoLike

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

16
параметр принимает значение символьной константы GL_CW то признак лицевой грани обход вер-
шин по часовой стрелке и GL_CCW – против часовой стрелки.
Лицевые или обратные грани можно целенаправленно исключать из процесса вывода полигонов.
Рассмотрим команду осуществляющую управление выводом полигонов в зависимости от типа грани:
void glCullFace (GLenum mode)
Если значение параметра mode равно GL_FRONT, то не будут
отображаться лицевые грани. Также возможны значения GL_BACK и GL_FRONT_AND_BACK. По
умолчанию берется значение GL_BACK, т.е. выводить только лицевые грани. Перед тем как использо-
вать glCullFace()необходимо выполнить команду glEnable(GL_CULL_FACE), которая разрешит ис-
пользовать данный режим. Блокировка данного режима осуществляется командой
glDisable(GL_CULL_FACE).
Рассмотрим небольшой пример работы с лицевыми и обратными гранями полигонов:
glEnable(GL_CULL_FACE); // Вкл. режим упр. выводом граней
//glCullFace(GL_FRONT); // Исключить вывод лицевых граней
glColor3f(1.0f, 0.0f, 0.0f);//Красный цвет для треугольника
glBegin(GL_TRIANGLES); // Треугольник (против часовой)
glVertex3i( 100, 100, 0); // Вершина 1
glVertex3i( 50, 50, 0); // Вершина 2
glVertex3i( 150, 50, 0); // Вершина 3
glEnd();
glColor3f(0.0f, 1.0f, 0.0f); //Зеленый цвет для прямоугольника
glBegin(GL_QUADS); // Прямоугольник (по часовой)
glVertex3i(200, 100, 0); // Вершина 1
glVertex3i(250, 100, 0); // Вершина 2
glVertex3i(250, 50, 0); // Вершина 3
glVertex3i(200, 50, 0); // Вершина 4
glEnd();
Если посмотреть на результат работы данного фрагмента программы, то можем увидеть на экране
только красный треугольник, так как зеленый прямоугольник был отброшен (по умолчанию в данном
режиме отбрасываются обратные грани полигонов). Если разблокировать команду glCull-
Face(GL_FRONT)(убрать комментарии), то на экране вместо треугольника появится прямоугольник зе-
леного цвета. Его описание соответствует нелицевой грани.
5.6 Заполнение полигонов шаблонами
По умолчанию полигоны заполняются без рисунка однородным значением. Для заполнения поли-
гона повторяющимся орнаментом используют команду, использующую битовую карту:
void glPolygonStipple (const GLubyte *mask)
Предварительно готовится битовая карта размером 32×32 бит, являющаяся маской, циклично (по
мере необходимости) накладываемой на полигон при его выводе в растр. Там, где стоит 1 соответст-
вующий пиксель полигона будет нарисован, а там, где появляется 0 пиксель нарисован не будет. Па-
раметр mask это указатель на массив битовой карты. Покрытие шаблоном полигона разрешается и за-
прещается с помощью команд glEnable() и glDisable()с параметром GL_POLYGON_STIPPLE. Варьи-
руя параметрами GL_UNPACK* команды glPixelStore*() можно изменять режим хранения пикселей в
памяти (смотри MSDN), что повлечет за собой видоизменение внутреннего рисунка в полигоне.
Рассмотрим пример использования шаблона для заполнения четырехугольного полигона. Первые
четыре байта (0×ff,0×ff,0×ff,0×ff) массива Bit_Map описывают нижнюю строчку трафарета, вторая чет-
верка (0x01,0x01,0x01,0x01) вторую снизу строчку трафарета и т.д. Более наглядней оформлять лис-
тинг шаблона в программе матрицей размером 4x32, но для экономии места приходится 16x16, т.е. две
строки шаблона записывать в одной строке листинга.
GLvoid DrawPrim()
{
// Формируем шаблон полигона 32x32 бит!!!