Мегаобучалка Главная | О нас | Обратная связь


Особенности работы с вершинами и примитивами в OpenGL



2015-12-04 617 Обсуждений (0)
Особенности работы с вершинами и примитивами в OpenGL 0.00 из 5.00 0 оценок




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

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

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

 

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

 

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

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

для студентов специальности 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.

Особенности работы с вершинами и примитивами в OpenGL.

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

Изучение работы с вершинами и примитивами в OpenGL.

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

Вершина – это точка в трехмерном пространстве. Для ее определения в библиотеке реализована специальная команда:

void glVertex[2 3 4][s i f d] (type coord)

void glVertex[2 3 4][s i f d] v (type coord)

Вызов любой команды glVertex*определяется четырьмя координатами: x, y, z, w. При этом соблюдается следующее соглашение: вызов glVertex2*задает координаты x, y, z полагается равной 0, а w – 1. Вызов glVertex3*задает координаты x, y, z, а w полагается равной 1. Вызов glVertex4*задает все четыре координаты.

Примитив – это фигура, такая как точка, линия, многоугольник, прямоугольник пикселей или битовый массив, которая рисуется, хранится и которой манипулируют как единой дискретной величиной. Другими словами, примитивы – это те элементы, из которых строятся графические объекты любой степени сложности. Они определяются группами из одной или нескольких вершин, каждая из которых имеет ассоциированные с ней данные:

1. Текущий цвет – задает цвет, который вместе с условиями освещения определяет результирующий цвет вершины. Цвет задается командами glColor*для режима RGB и glIndex*для индексного режима.

2. Текущая позиции растра – используется для определения координат растра при работе с пикселами и битовыми массивами. Задается командой glRastePos*.

3. Текущая нормаль – определяет вектор нормали, ассоциированный с отдельной нормалью, и задает ориентацию содержащей ее поверхности в трехмерном пространстве. Для указания нормали реализована команда glNormal*.

4. Текущие координаты текстуры – определяют местоположение в карте текстуры, которая ассоциируется с вершиной объекта. Задаются командой glTexCoord*.

Примитив или группа однотипных примитивов, к которым относятся точки, линии, связанные линии, замкнутые линии, треугольники, связанные треугольники с общим ребром, связанные треугольники с общей вершиной, четырехугольники, связанные четырехугольники и многоугольники, определяются внутри командных скобок glBegin/glEnd:



2015-12-04 617 Обсуждений (0)
Особенности работы с вершинами и примитивами в OpenGL 0.00 из 5.00 0 оценок









Обсуждение в статье: Особенности работы с вершинами и примитивами в OpenGL

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Почему человек чувствует себя несчастным?: Для начала определим, что такое несчастье. Несчастьем мы будем считать психологическое состояние...
Почему люди поддаются рекламе?: Только не надо искать ответы в качестве или количестве рекламы...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (617)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.006 сек.)