Лабораторная работа № 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 (сглаживание для полигонов).
|