Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КГ_методичка.doc
Скачиваний:
27
Добавлен:
08.03.2016
Размер:
125.44 Кб
Скачать

Введение

Учебно-методическое пособие содержит описание и порядок выполнения восьми лабораторных работ по курсу "Программирование графики" и предназначено для изучения базовых понятий и практического освоения процедур и функций библиотеки «OPENGL», а также методов и средств создания двухмерной и трехмерной графики.

В пособии рассматриваются следующие темы: «Построение примитивов с помощью библиотеки «OPENGL», «Удаление невидимых граней», «Текстурирование трехмерных изображений с использованием библиотеки «OPENGL», «Источники света и материалы в библиотеке «OPENGL», «Метод порталов», «Построение полигональной модели графика двух переменных».

Задания выполняются с использованием любой системы визуального программирования.

Каждую лабораторную работу необходимо выполнять в следующем порядке:

  1. Разработать алгоритм решения в соответствии с заданием.

  2. Составить программу решения задачи.

  3. Осуществить отладку и тестирование программы.

Требования к оформлению отчета, к программе и исходным текстам приведены в приложении 1.

При выполнении лабораторных работ в компьютерном классе необходимо соблюдать общие правила техники безопасности.

Лабораторная работа №1 Построение примитивов с помощью библиотеки OpenGl

Цель работы: изучить основные процедуры и функции библиотеки OpenGL, приобрести практические навыки построения объемных геометрических фигур.

Основные теоретические положения

1. Особенности работы с библиотекой OpenGl

Для работы библиотеки OpenGL под операционной системой Windows имеется ряд особенностей. Библиотека при инициализации создает так называемый контекст воспроизведения. Все команды передаются этому объекту, который их ставит во внутреннюю очередь. Независимо от основной программы он выбирает команды из очереди и выполняет их. Библиотека должна связать контекст воспроизведения с окном приложения. Управление видеопараметрами окна выполняется через задание формата пикселей, путем заполнения структуры типа PixelFormatDescriptor. Затем необходимо запросить у системы идентификатор данного формата функцией ChoosePixelFormat. Операционная система из множества поддерживаемых ею форматов подберет наиболее близкий к запрашиваемому формату. Запрошенный и полученный форматы могут отличаться. С помощью функции DescribePixelFormat можно узнать параметры формата, который вернула операционная система. Функция SetPixelFormat устанавливает формат пикселя для окна.

Создание и установка активного контекста воспроизведения выполняется при создании окна, а освобождение производится при разрушении формы.

2. Основные процедуры и функции OpenGl

Основной алгоритм работы приложения под OpenGL состоит в следующем:

  1. Установить формат пикселя для окна.

  2. Создать контекст воспроизведения на основе контекста окна (wglCreateContext).

  3. Сделать его текущим (wglMakeCurrent).

  4. Активировать режим установки матрицы проецирования (glMatrixMode(GL_PROJECTION)_).

  5. Установка единичной матрицы glLoadIdentity.

  6. Активировать режим установки видовой матрицы (glMatrixMode(GL_MODELVIEW)). Видовая матрица – матрица преобразования объекта.

  7. glLoadIdentity загрузка единичной матрицы.

  8. Цикл построения изображения.

  9. Сделать контекст не активным (wglMakeCurrent со вторым параметром 0).

  10. Освободить контекст воспроизведения (wglDeleteContext).

Построение изображений осуществляется в обработке события WM_PAINT.

При обработке сообщения об отрисовке окна выполняется следующий порядок:

  1. Функцией glClearColor задается цвет заднего фона.

  2. Функцией glClear(GL_COLOR_BUFFER_BIT) очищается буфер.

  3. Начало рисования объекта GlBegin().

  4. Задание точек вершин процедурой GlVertex3f.

  5. Конец отрисовки объекта GlEnd.

  6. Отображение буфера SwapBuffers.

Пункты 3-5 повторяются для каждого примитива.

Функция glBegin имеет параметр, который может принимать следующие значения.

  1. GL_POINT – примитив точка

  2. GL_LINES – отрезки

  3. GL_LINE_STRIP – последовательность связных точек

  4. GL_TRINAGLE – треугольник

  5. GL_QUADS – четырехугольник

  6. GL_POLYGON - многоугольник

Для правильного построения трехмерных моделей, необходимо включить буфер глубины(Z-буфер) командой glEnable(GL_DEPTH_TEST). И перед построением нового кадра очистить информацию о глубине командой glClear(GL_DEPTH_BUFFER_BIT). Все вершины задаются в трехмерном пространстве.

Для работы с трехмерными объектами в библиотеке OPENGL требуется задать следующие параметры: матрицу проецирования, видовую матрицу и параметры взгляда.

Матрица проецирования задается командой glMatrixMode(GL_PROJECTION). Затем необходимо задать матрицу проецирования. Для этого существуют следующие функции:

  1. glLoadMatrix - загружает матрицу из массива.

  2. glLoadIdentity – загружает единичную матрицу.

  3. glMultMatrix – умножает на матрицу, заданную как массив.

Для работы с основными видами проецирования используются вспомогательные команды:

  1. Задание ортографической проекции выполняется через команду glOrtho, которая задает параллелограмм видимости в пространстве сцены. При этом считается, что глаз наблюдателя расположен в точке (0,0,0).

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

При этом данные команды формируют матрицу на основе параметров и умножают ее на текущую матрицу проецирования. Результат умножения записывается в качестве матрицы проецирования.

Видовая матрица задается командой glMatrixMode(GL_MODELVIEW). Для стандартных операций используются следующие команды:

  1. glRotate – задается матрица вращения;

  2. glTranslate – задается матрица переноса;

  3. glScale – матрица масштабирования.

При этом данные команды формируют матрицу на основе параметров и умножают ее на текущую видовую матрицу. Результат умножения записывается в качестве видовой матрицы.

Область просмотра задается командой glViewport, которая задает преобразование из координат OPENGL в координаты окна.

Ориентация задается командой glLookAt, в которой задаются три вектора: вектор, описывающий точку наблюдения; вектор, описывающий центр сцены и вектор, задающий положительное направление оси Y.

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

GlNewList, glEndList

Для различения списков используются целые положительные числа, задаваемые при создании списка значением параметра list, а параметр mode определяет режим обработки команд, входящих в список:

GL_COMPILE команды записываются в список без выполнения

GL_COMPILE_AND_EXECUTE команды сначала выполняются, а затем записываются в список

После того, как список создан, его можно вызвать командой glCallList, указав в параметре list идентификатор нужного списка. Чтобы вызвать сразу несколько списков, можно воспользоваться командой glCallLists, вызывающей n списков с идентификаторами из массива. Для удаления списков используется команда glDeleteLists. Номер списка вычисляется относительно базового значения. По умолчанию базовое значение равно нулю. Установка нового базового значения осуществляется посредством вызова glListBase.

Для вывода текста в OpenGL требуется создать список изображения для каждой буквы. Данную операцию можно выполнить с помощью функции wglUseFontBitmaps, которая создает набор списков изображений для каждой буквы. Например:

glCallLists(24,GL_UNSIGNED_BYTE,"Hello Win32 OpenGL World");

Примечание: Для работы в Delphi должен существовать модуль OpenGL, а для языка C++ заголовочные файлы gl.h и glu.h и библиотеки opengl32.h и glu32.lib.