- •Предисловие
- •Лабораторная работа № 1. Знакомство с OpenGl с использованием кроссплатформенной библиотеки sdl
- •Теоретические сведения
- •Двумерная и трехмерная графика с помощью OpenGl
- •Подключение и инициализация OpenGl.
- •Расширенная работа с OpenGl-контекстом
- •Постановка задачи
- •Контрольные вопросы
- •Лабораторная работа № 2. Примитивы OpenGl, построение двумерных объектов, язык шейдеров.
- •Теоретические сведения
- •Линии: одиночные, ломаные, замкнутые ломаные.
- •Вывод примитивов на экран
- •Задание к лабораторной работе
- •Дополнительное задание
- •Лабораторная работа № 3. Аффинные преобразования. Трехмерные построения. Параллельная и перспективная проекции. Квадрик-объекты.
- •Лабораторная работа № 4. Камера. Освещение. Текстуры.
- •Контрольные вопросы.
- •Лабораторная работа № 5. Загрузка готовых моделей. Геометрические шейдеры. Анимация.
- •Библиографический список.
- •Оглавление
Расширенная работа с OpenGl-контекстом
Прежде чем получить контекст воспроизведения, сервер OpenGL должен получить детальные характеристики используемого оборудования. Эти характеристики хранятся в специальной структуре или массиве – описание формата пикселя. Формат пикселя определяет версию OpenGL-контекста, конфигурацию буфера цвета и вспомогательных буферов.
Для платформонезависимого взаимодействия с описанием формата пикселя в SDL предусмотрен механизм установки и получения OpenGL-атрибутов, объявленных следующим образом:
Установка OpenGL-атрибута:
extern DECLSPEC int SDLCALL SDL_GL_SetAttribute(SDL_GLattr
attr, int value);
где attr – OpenGL-атрибут, который необходимо установить; value – значение атрибута.
Обратите внимание, функция SDL_GL_SetAttribute должна быть вызвана прежде чем будет создано окно с поддержкой OpenGL-контекста.
if (SDL_Init(SDL_INIT_VIDEO) < 0) {
//сообщение об ошибке
}
/* ... */
SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 5);
SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 5);
SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 5);
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 16);
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, SDL_TRUE);
/* Создание окна с поддержкой OpenGL */
Получение значения OpenGL-атрибута:
extern DECLSPEC int SDLCALL SDL_GL_GetAttribute(SDL_GLattr attr, int *value);
где attr – OpenGL-атрибут, который необходимо получить; value – указатель на переменную для записи значения.
Значения, передаваемые в параметре attr при вызове функций SDL_GL_SetAttribute и SDL_GL_GetAttribute:
SDL_GL_RED_SIZE – минимальный размер (в битах) красного канала в буфере цвета. По умолчанию равен 3.
SDL_GL_GREEN_SIZE – минимальный размер (в битах) зеленого канала в буфере цвета. По умолчанию равен 3.
SDL_GL_BLUE_SIZE – минимальный размер (в битах) синего канала в буфере цвета. По умолчанию равен 2.
SDL_GL_ALPHA_SIZE – минимальный размер (в битах) альфа-канала в буфере цвета. По умолчанию равен 0.
SDL_GL_BUFFER_SIZE – минимальный размер (в битах) буфера кадра (framebuffer). По умолчанию равен 0.
SDL_GL_DOUBLEBUFFER – включение / выключение режима двойной буферизации. По умолчанию включено.
SDL_GL_DEPTH_SIZE – минимальный размер (в битах) буфера глубины. По умолчанию равен 16.
SDL_GL_STENCIL_SIZE – минимальный размер (в битах) буфера трафарета. По умолчанию равен 0.
SDL_GL_ACCUM_RED_SIZE – минимальный размер (в битах) красного канала в накопительном буфере. По умолчанию равен 0.
SDL_GL_ACCUM_GREEN_SIZE – минимальный размер (в битах) зеленого канала в накопительном буфере. По умолчанию равен 0.
SDL_GL_ACCUM_BLUE_SIZE – минимальный размер (в битах) синего канала в накопительном буфере. По умолчанию равен 0.
SDL_GL_ACCUM_ALPHA_SIZE – минимальный размер (в битах) альфа-канала в накопительном буфере. По умолчанию равен 0.
SDL_GL_STEREO – включение/выключение режима стерео. По умолчанию выключено. (Доступно в SDL2)
SDL_GL_MULTISAMPLEBUFFERS – количество используемых буферов для многовыборочного сглаживания (multisample anti-aliasing). По умолчанию равен 0. (Доступно в SDL2)
SDL_GL_MULTISAMPLESAMPLES – количество выборок, используемых вокруг текущего пикселя используется для многовыборочного сглаживания (multisample anti-aliasing). По умолчанию равен 0. (Доступно в SDL2)
SDL_GL_ACCELERATED_VISUAL – включение / выключение аппаратного ускорения. (Доступно в SDL2)
В SDL2 была добавлена возможность задания необходимой версии OpenGL-контекста с введением следующих констант:
SDL_GL_CONTEXT_MAJOR_VERSION – основная версия OpenGL.
SDL_GL_CONTEXT_MINOR_VERSION – минорная версия OpenGL.
SDL_GL_CONTEXT_PROFILE_MASK – режим работы контекста, может принимать следующие значения:
SDL_GL_CONTEXT_PROFILE_CORE – режим Core Profile, устаревшие функции запрещены.
SDL_GL_CONTEXT_PROFILE_COMPATIBILITY – режим Compatibility profile, устаревшие функции разрешены. Используется по умолчанию.
SDL_GL_CONTEXT_PROFILE_ES – режим Embedded Systems Profile, доступно некоторая часть подмножества графического интерфейса OpenGL входящего в стандарт OpenGL ES [4].
Чтобы установить значения описания формата пикселя в значения по умолчанию применяется функция SDL_GL_ResetAttributes, объявленная следующим образом:
extern DECLSPEC void SDLCALL SDL_GL_ResetAttributes(void);
