Главная | Случайная
Обратная связь

ТОР 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-2019 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных