Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Лабораторная работа № 2. Примитивы OpenGL, основные приемы построения двумерных объектов.





Цель работы.

Знакомство с примитивами OpenGL, предназначенными для вывода точек, линий и многоугольников. Определение цвета объектов. Различные способы закрашивания объектов.

Необходимые теоретические сведения.

Для выполнения работы необходимо иметь представление об основных принципах формирования изображения на экране ([7] – лекция 17), о моделировании объектов на плоскости ([7] – лекции 7, 8, 10); знать особенности представления цвета в цветовой модели RGB ([7] – лекция 4); понимать смысл термина «антиэлайзинг» ([7] – лекция 6).

Область вывода в OpenGL задается командой

glViewPort(0, 0, ClientWidth, ClientHeight),

где первые два параметра задают положение левого верхнего угла окна вывода, параметры ClientWidth, ClientHeight определяют размер окна в экранных координатах. Центр полученной области вывода имеет координаты (0, 0). Координаты изменяются в диапазоне [-1; 1] по каждой оси.

Если при установке формата пиксела был установлен режим двойной буферизации (флаг PFD_DOUBLEBUFFER), то изображение готовится во внеэкранном буфере, и необходимо обеспечить перезапись содержимого внеэкранного буфера в основной. Сделать это можно командой

BOOL SwapBuffers(HDC hdc);

Все изображения строятся из отдельных примитивов, которые описываются с помощью набора вершин (Vertex). Примитивами OpenGl являются точки (одиночные вершины), линии (пары вершин), треугольники (три вершины), четырехугольники (четыре вершины) и полигоны (3 и более вершин).

Командные скобки. Использование функций glBegin и glEnd.

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

Внутри командных скобок могут находиться любые операторы языка и многие функции OpenGL. Главное назначение командных скобок – задание режима (примитива) для команд glVertex (вершина), определяющих координаты вершин для рисования примитивов OpenGL.

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

Цвет отдельных вершин или примитивов может устанавливаться как вне командных скобок, так и внутри них. Для установки цвета используется команда

glColor3f(0.3f, 0.5f, 0.1f)

где цвет формируется как сумма компонент красного, зеленого и синего цветов в указанной пропорции. Значения компонент задаются в виде вещественных чисел в интервале [0; 1].

Компоненты цвета могут быть заданы и в целочисленной форме, предельным значением в этом случае будет являться максимальное 8-битное целое без знака, например, белый цвет будет записан следующим образом:

glColor3i(214748647, 214748647, 214748647).

Однако предпочтительно использовать команду в вещественной форме, т.к. OpenGL хранит данные именно в вещественном формате.

Цифра 3 в названии команды означает число аргументов команды.

Аргументы функции glBegin.

Аргументами функции glBegin могут быть стандартные константы OpenGl, определяющие примитивы библиотеки: 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. В программе имена констант должны быть записаны именно так как это сделано здесь (все в верхнем регистре).

Включение и отключение режима сглаживания (антиэлайзинг).

Для установки режима сглаживания перед командными скобками должна стоять команда glEnable() с соответствующей константой в качестве аргумента, а после командных скобок – команда glDisable() также с соответствующей константой. Выбор константы определяется примитивом, сглаживание которого должно быть включено (или отключено): GL_POINT_SMOOTH (сглаживание для точек), GL_LINE_SMOOTH (сглаживание линий), GL_POLYGON_SMOOTH (сглаживание для полигонов).







Дата добавления: 2015-10-19; просмотров: 876. Нарушение авторских прав; Мы поможем в написании вашей работы!




Важнейшие способы обработки и анализа рядов динамики Не во всех случаях эмпирические данные рядов динамики позволяют определить тенденцию изменения явления во времени...


ТЕОРЕТИЧЕСКАЯ МЕХАНИКА Статика является частью теоретической механики, изучающей условия, при ко­торых тело находится под действием заданной системы сил...


Теория усилителей. Схема Основная масса современных аналоговых и аналого-цифровых электронных устройств выполняется на специализированных микросхемах...


Логические цифровые микросхемы Более сложные элементы цифровой схемотехники (триггеры, мультиплексоры, декодеры и т.д.) не имеют...

ТЕРМОДИНАМИКА БИОЛОГИЧЕСКИХ СИСТЕМ. 1. Особенности термодинамического метода изучения биологических систем. Основные понятия термодинамики. Термодинамикой называется раздел физики...

Травматическая окклюзия и ее клинические признаки При пародонтите и парадонтозе резистентность тканей пародонта падает...

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

Механизм действия гормонов а) Цитозольный механизм действия гормонов. По цитозольному механизму действуют гормоны 1 группы...

Алгоритм выполнения манипуляции Приемы наружного акушерского исследования. Приемы Леопольда – Левицкого. Цель...

ИГРЫ НА ТАКТИЛЬНОЕ ВЗАИМОДЕЙСТВИЕ Методические рекомендации по проведению игр на тактильное взаимодействие...

Studopedia.info - Студопедия - 2014-2025 год . (0.01 сек.) русская версия | украинская версия