Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






Основные процедуры и функции 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.

Задания

 

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

Внизу экрана должна выводиться текстовая строка вида «ФИО студента»

 

Контрольные вопросы

 

1. Каковы особенности работы с OpenGL под операционной системой Windows?

2. Что такое видовая матрица?

3. Как задать матрицу проецирования?

4. Список изображений.

5. Как выводится текст в OpenGL?

 






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных