Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка СМ 2011.doc
Скачиваний:
3
Добавлен:
14.11.2019
Размер:
108.54 Кб
Скачать

Федеральное агентство по образованию

Тульский государственный университет

Кафедра электронных вычислительных машин

СИСТЕМЫ МУЛЬТИМЕДИА

методические указания

по выполнению лабораторных работ

для студентов специальности 230101

«Вычислительные машины, комплексы, системы и сети»

Часть 2

Тула 2010

Лабораторная работа № 1.

Особенности реализации OpenGL.

  1. Цель работы

Изучение установок стиля окна OpenGL, установки формата пикселей, текущего контекста воспроизведения.

2. Теоретические положения

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

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

2.1. Установка стиля окна OpenGL.

OpenGL требует для своего окна наличия установочных стилей WS_CLIPCHILDREN и WS_CLIPSIBLINGS.

2.2. Установка формата пикселей.

Используется специальная структура для представления формата пикселей PIXELFORMATDESCRIPTOR. Структура имеет следующие поля:

-nSize - размер структуры

-nVersion - номер версии. Для текущей реализации значение устанавливают в 1

-dwFlags - множество битовых флагов, определяющих устройство и интерфейс, с которым совместим формат пикселей

-iPixelType – режим для изображения цветов

-cColorBits – число битовых плоскостей в каждом буфере цвета

…….

Основная реализация OpenGL поддерживает 24 различных формата пикселей.

2.3. Установка текущего контекста воспроизведения.

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

- HGLRCwglCreateContext (HDC hdc) – функция создает новый контекст воспроизведения OpenGL, который подходит для рисования на устройстве, определенном дескриптором hdc. При успешном завершении функция возвращает дескриптор созданного контекста воспроизведения OpenGL, в случае неудачи – NULL.

- BOOL wglMakeCurrent(

HDC hdc,

HGLRC hglrc) – установка единственного текущего контекста воспроизведения потока. Параметр hdc определяет контекст устройства (поверхность рисования), hglrc – контекст воспроизведения OpenGL.Перед тем, как установить новый текущий контекст воспроизведения, OpenGL сбрасывает предыдущий контекст и заменяет его на новый. Механизм задействован для жесткого выполнения требования о том, что текущим в потоке может быть только один контекст воспроизведения. Более того, попытка сделать один и тот же контекст воспроизведения текущим для нескольких потоков приведет к ошибке. Приложение может осуществлять рисование в нескольких потоках. При этом оно должно использовать для каждого из них различные текущие контексты воспроизведения.

Самое удобное место для создания контекста воспроизведения – это обработчик сообщения WM_CREATE, где эти две функции обычно и используются.

2.4. Завершение работы с OpenGL.

Перед окончанием работы с потоками необходимо удалить контекст воспроизведения. Для этого используется функция

BOOL wglDeleteContext(HGLRC hglrc).

В качестве параметра hglrc используется дескриптор контекста воспроизведения, который необходимо удалить. После следует удалить и ассоциированный с ним контекст устройства. Текущий контекст воспроизведения можно узнать, если воспользоваться функцией

HGLRC wglGetCurrentContex()

которая возвращает дескриптор текущего контекста воспроизведения или NULL, если такого нет.

Дескриптор контекста устройства, ассоциированного с контекстом воспроизведения можно получить при помощи функции

HDC wglGetCyrrentDC()

Если поток не имеет текущего контекста воспроизведения, функция возвращает NULL.

Для того, чтобы можно было работать с OpenGL, необходимо выполнить следующие требования:

1. В функции PreCreateWindow установить для окна стили WS_CLIPCHILDREN и WS_CLIPSIBLINGS.

2. В обработчике сообщения WM_CREATE необходимо установить формат пикселей (функции ChoosePixelFormat и SetPixelFormat), создать контекст воспроизведения (функция wglCreateContex) и сделать его текущим (функция wglMakeCurrent).

3. В обработчике сообщения WM_DESTROY обеспечить удаление контекста воспроизведения (функции wglMakeCurrent и wglDeleteContex).

Кроме перечисленных выше действий необходимо подключить к проекту библиотеки opengl32.lib и glu32.lib, а также включить заголовочные файлы gl\gl.h и gl\glu.h. Лучше всего это сделать в файле stdafx.h.

3. Задание на работу

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

Написать программу, создающую контекст воспроизведения.

Написать программу, делающую текущим контекст воспроизведения.

4. Порядок выполнения работы

4.1. Ознакомиться с теоретическими положениями,

4.2. Выполнить предложенный вариант задания.

5. Оформление отчета

Отчет должен содержать: цель работы, задание на работу, результаты работы.

Лабораторная работа № 2.