Мегаобучалка Главная | О нас | Обратная связь


Void glBegin (Glenum mode)



2015-12-04 605 Обсуждений (0)
Void glBegin (Glenum mode) 0.00 из 5.00 0 оценок




Void glEnd()

Параметр modeопределяет примитивы, которые создаются из вершин, определенных между этими командами. Доступными являются следующие символы констант (GL_LINES – номер текущей вершины, N – общее число вершин):

GL_POINTS – каждая вершина рассматривается как отдельная точка, параметры которой не зависят от параметров остальных заданных точек. При этом вершина n определяет точку n. Рисуется N точек. Минимальное число вершин -1.

GL_LINES – каждая пара вершин рассматривается как независимы отрезок. Первые две вершины определяют первый отрезок, следующие две – второй и т.д., вершины (2n-1) и 2n определяют отрезок n. Всего рисуется N/2 линий. Если число вершин нечетно, то последняя просто игнорируется. Минимальное число вершин -2.

GL_LINE_STRIP – в этом режиме рисуется последовательность из одного или нескольких связанных отрезков. Первая вершина задает начало первого отрезка, вторая – конец первого, который является также началом второго. В общем случае, вершина n (n>1) определяет начало отрезка n и конец отрезка (n-1). Всего рисуется (N-1) отрезок. Минимальное число вершин -2.

GL_LINE_LOOP –этот режим аналогичен предыдущему за исключением того, что последняя вершина является началом отрезка, концом которого служит первая вершина. Вершины n и (n+1) определяют отрезок n. При этом последний отрезок определяется вершинами N и 1. Всего рисуется N отрезков. Минимальное число вершин -2.

GL_TRIANGLES – каждая тройка вершин рассматривается как независимый треугольник. Вершины (3n-2), (3 n-1) и 3n (в таком порядке) определяют треугольник n. Если число вершин не кратно 3, то оставшиеся (одна или две) вершины игнорируются. Всего рисуется N/3 треугольника. Минимальное число вершин -3

GL_TRIANGLE_STRIP –в этом режиме рисуется группа связанных треугольников, имеющих общую грань. Первые три вершины определяют первый треугольник, вторая, третья и четвертая – второй и т.д. Для нечетного n вершины n, (n+1) и (n+2) определят треугольник n. Для четного n треугольник определят вершины (n+1), n и (n+2). Всего рисуется (N-2) треугольника. Минимальное число вершин -3.

GL_TRIANGLE_FAN– в этом режиме также рисуется группа связанных треугольников. Первые три вершины определяют первый треугольник. Первая, третья и четвертая – второй и т.д. Вершины 1, (n+1), (n+2) определяют треугольник n . Всего рисуется (N-2) треугольника. Минимальное число вершин -3.

GL_QUADS– каждая группа из четырех вершин рассматривается как независимый четырехугольник. Вершины (4 n -1) и (4n ) определяют четырехугольник n . Если число вершин не кратно 4, то оставшиеся (одна, две или три) вершины игнорируются. Всего рисуется N/4 четырехугольника. Минимальное число вершин - 4.

GL_QUAD_STRIP– рисует связанную группу четырехугольников. Первые четыре вершины определяют первый четырехугольник. Третья, четвертая, пятая и шестая – второй и т.д. Вершины (2n-1), 2n, (2 n+2) и (2 n+1)определяют четырехугольник n. Всего рисуется (N-2)/2 четырехугольника. Минимальное число вершин - 4.

GL_POLYGON– рисует отдельный выпуклый многоугольник, заданный вершинами от 1 до n. Минимальное число вершин -3.

3. Задание на работу

Построить заданный преподавателем примитив, учитывая цвет и текстуру.

Определить функции инициализации, отслеживающие изменения размеров и отображения в окне.

Написать программу, строящую треугольники заданного цвета.

4. Порядок выполнения работы

4.1. Ознакомиться с теоретическими положениями,

4.2. Выполнить предложенный вариант задания.

5. Оформление отчета

Отчет должен содержать: цель работы, задание на работу, результаты работы.

 

 

Лабораторная работа № 3.

Отсечение, прозрачность и смешение цветов

1. Цель работы

Изучение работы с отсечением, смешением цветов и прозрачностью в OpenGL.

2. Теоретические положения

После того как вершины обработаны и собраны в примитивы, последние поступают на этап растеризации и обработки фрагментов. Растеризация – это процесс, при котором примитивы преобразуются в двумерный образ. Каждая точка этого образа содержит такую информацию, как цвет, глубина и данные текстуры. Все вместе – точка и ассоциированная с ней информация называется фрагментом. Рассмотрим, как обрабатываются фрагменты.

Принадлежность пикселей контексту воспроизведения

Этот тест выполняется без участия пользователя и служит для определения того факта, что пиксели фрагмента принадлежат контексту воспроизведения. В случае положительного результата тестирования фрагмент направляется на следующий тест для проверки. Если результат тестирования отрицательный, то фрагмент отбрасывается. Основное предназначение этого теста заключается в том, чтобы позволить операционной системе отслеживать поведение OpenGL, например, не проводить дальнейшей обработки, если окно OpenGL не видимо в текущий момент времени.

Отсечение

Этот тест позволяет определять, лежит ли фрагмент внутри прямоугольника отсечения, задаваемого командой

Void glScissor(

Glint x,

Glint y,

Glsizei width,

Glsizei heigft)

которая определяет прямоугольник, в оконных координатах, называемый прямоугольником отсечения. Параметры x и y задают левый нижний угол этого прямоугольника, исходное значение (0,0), а width и heigft – его ширину и высоту. Когда контекст воспроизведения OpenGL первый раз присоединяется к этому окну, эти параметры устанавливаются по размеру окна.

Проведение теста отсечения разрешается или блокируется командами glEnableи glDisableс аргументом GL_SCISSOR_TEST. Если проведение этого теста разрешено, то модифицированы командами рисования могут быть только пиксели, которые лежат внутри этого прямоугольника. Координаты окна имеют целочисленные значения, так что вызов glScissor(0, 0, 1, 1) разрешает модифицировать только левый нижний пиксель в окне, а glScissor(0, 0, 0, 0) запрещает изменение всех пикселей. Когда этот тест заблокирован, в прямоугольник отсечения включаются все компоненты окна.

Void glShedeModel(Glenum mode) -параметр mode определяет символическое значение, представляющее способ закрашивания. Доступны значения GL_FLATи GL_SMOOTH.

Примитивы OpenGL могут быть закрашены двумя способами: однотонным и с плавным переходом цветов. Закрашивание с плавным переходом цветов (установлено по умолчанию) заставляет библиотеку рассчитывать цвета вершин, интерполируя их в зависимости от результатов растеризации, присваивая, обычно, различные цвета каждому результирующему фрагменту. При однотонном закрашивании используется цвет одной вершины, который присваивается всем фрагментам, сформированным растеризацией единственного примитива. Оба типа закрашивания неразличимы для точек.

Цвет примитива при однотонном закрашивании определяет единственная вершина. Будем считать, что нумерация вершин начинается с единицы. Для линии цвет каждого i-го отрезка распределяется до i+1-го. Для многоугольников цвет закрашивания определяется цветом вершины в соответствии с таблицей.

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

Тип многоугольного примитива Номер вершины
Многоугольник 1 - всегда
Треугольники, имеющие общую грань i+2
Связанные треугольники i+2
Независимые треугольники 3i
Связанные четырехугольники 2i+2
Независимые четырехугольники 4i

Прозрачность

Рассматриваемый тест действует только в режиме RGBA, то есть при явном указании значений компонентов цвета. В режиме индексации цвета считается, что фрагмент успешно прошел этот тест. Необходимо сказать о четвертом параметре цвета – альфа или прозрачность. Этот компонент определяет степень прозрачности фрагмента: значение альфа, равное 0.0, подразумевает полную прозрачность, а значение 1.0 – полную непрозрачность соответствующего элемента.

Выполняется этот тест или нет, определяется командами glEnableи glDisableс аргументом GL_ALPHA_TEST. Если тест не выполняется, то считается, что он прошел успешно. Управляется этот тест командой:

Void glAlphaFunc(

Glenum func,

Glclampf ref)

где параметр ref задает значение ссылки, с которым сравнивается поступающее значение альфа. Это значение приводится к диапазону [0, 1]: 0 – представляет самое маленькое, а 1 – самое большое возможное значение. По умолчанию ссылка равна 0. Параметр func задает функцию сравнения значений альфа. Допустимы следующие символические константы:

GL_NEVER – никогда,

GL_LESS – если поступающее значение меньше, чем ссылочное,

GL_EQUAL – если поступающее значение равно ссылочному,

GL_LEQUAL -поступающее значение меньше или равно ссылочному,

GL_GREATER - поступающее значение больше, чем ссылочное,

GL_NOTEQUAL - поступающее значение не равно ссылочному,

GL_GEQUAL - поступающее значение больше или равно ссылочному,

GL_ALWAYS – всегда, установлена по умолчанию.

Альфа-тест обрабатывает фрагменты в зависимости от результата сравнения между поступающим значением альфа фрагмента и постоянным значением ссылки. Эта команда определяет ссылку и функцию сравнения. Если результат сравнения положительный – поступающий фрагмент рисуется (в зависимости от условий следующих тестов – трафарета и буфера глубины). Если результат отрицательный, то в буфер кадра на месте расположения пикселя не происходит никаких изменений. Команда действует на все записываемые пиксели, включая те, которые получаются в результате сканирования точек, линий, многоугольников и битовых массивов, а также операций рисования и копирования пикселей, и не влияет на операции по очистке экрана.

Смешение цветов

При смешении цветов поступающие значения красного, зеленого, синего и альфа компонентов цвета комбинируются с соответствующими значениями, хранящимися в буфере кадра. Причем результат смешения зависит только от значений прозрачности, а то, каким образом цвета комбинируются, задается командой

Void glBlendFunc(

Glenum sfactor,

Glenum dfactor)

Эта команда задает метод, используемый при смешении поступающих (источник) значений RGBA с уже хранящимися в буфере кадра (приемник). Параметр sfactor определяет способ расчета красного, зеленого, синего и альфа компонентов источника смешения и может принимать одно из девяти значений, заданных символическими константами: GL_ZERO, GL_ONE,GL_SRC_ALPHA, GL_DST_ALPHA, GL_DST_COLOR, GL_ONE_MINUS_DST_COLOR,

GL_ONE_MINUS_SRC_ALPHA, GL_ONE_MINUS_DST_ALPHA,

GL_SRC_ALPHA_SATURATE. Аналогично для параметров буфера кадра. Для него допустимы восемь различных значений: GL_ZERO, GL_ONE,

GL_SRC_COLOR, GL_SRC_ALPHA, GL_DST_ALPHA,

GL_ONE_MINUS_SRC_COLOR, GL_ONE_MINUS_SRC_ALPHA,

GL_ONE_MINUS_DST_ALPHA.

Прозрачность лучше реализовывать , используя команду

glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)с примитивами, отсортированными по глубине от наиболее к наименее отдаленным. Такой способ расчета прозрачности не требует наличия битовых плоскостей альфа в буфере кадра. Такой же вызов команды можно использовать при устранении ступенчатости точек и линий. Чтобы оптимизировать устранение ступенчатости многоугольников, используют команду

glBlendFunc (GL_SRC_ALPHA_SATURATE, GL_ONE), отсортировав их предварительно от наиболее близкого до наиболее удаленного. Результат храниться в битовых плоскостях альфа приемника, которые должны быть представлены для этой команды смешения, чтобы получить корректный результат.

Если для рисования доступен более чем один буфер цвета, в каждом из них смешение осуществляется раздельно. По умолчанию смешение заблокировано. Для его включения и выключения используют команды glEnableи glDisableс аргументом GL_BLEND.

3. Задание на работу

Построить заданные примитивы.

Написать программу, выполняющую смешение цветов.

Написать программу, позволяющую вырезать в окружности прямоугольное окно, чтобы открыть доступ к находящемуся за ней изображению..

4. Порядок выполнения работы

4.1. Ознакомиться с теоретическими положениями,

4.2. Выполнить предложенный вариант задания.

5. Оформление отчета

Отчет должен содержать: цель работы, задание на работу, результаты работы.

 

Лабораторная работа № 4.



2015-12-04 605 Обсуждений (0)
Void glBegin (Glenum mode) 0.00 из 5.00 0 оценок









Обсуждение в статье: Void glBegin (Glenum mode)

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Генезис конфликтологии как науки в древней Греции: Для уяснения предыстории конфликтологии существенное значение имеет обращение к античной...
Как выбрать специалиста по управлению гостиницей: Понятно, что управление гостиницей невозможно без специальных знаний. Соответственно, важна квалификация...
Как вы ведете себя при стрессе?: Вы можете самостоятельно управлять стрессом! Каждый из нас имеет право и возможность уменьшить его воздействие на нас...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (605)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.01 сек.)