Найти в Дзене
GL Programming

Урок 3. Инициализация окна OpenGL.

Предыдущий урок.

В этом уроке мы инициализируем окно OpenGL. Начнем.

Открываем проект -> Обозреватель решений -> Файл исходного кода -> "Имя".cpp.

Подключаем библиотеку freeglut(см. Урок 1), и открываем конструкцию функции main.

Подключаемый файл freeglut.h находится в папке с проектом. Функция main должна обязательно принимать параметры командной строки. Инициализируем окно.

-2

Рассмотрим каждую функцию:

glutInit(int* argc, char* argv) - самая первая вызываемая функция. В принимает в качестве аргументов указатель на переданные параметры командной строки. Эти параметры берутся из функции main. Функция ничего не возвращает.

glutInitDisplayMode(unsigned int mode) - функция принимает в себя единственный параметр, который может быть представлен константой или комбинацией этих констант, с помощью побитового оператора - | . Устанавливает режим вывода в окно. В нашем случае мы использовали пока только две константы:

GLUT_DOUBLE - вывод в окно будет использоваться посредством использования двух буферов. Пока один буфер отображается, второй готовится к отображению. После чего они меняются. Можно конечно было бы и GLUT_SINGLE прописать, и использовать только один буфер, но это приведет нас к эффекту мерцания картинки.

GLUT_RGB - для отображения графической информации будут использоваться три цвета в формате RGB.

Функция ничего не возвращает.

glutInitWindowSize(int w, int h) - устанавливает размеры будущего окна. В моем случае 640 пикселей в ширину и 480 в высоту. Функция ничего не возвращает.

glutInitWindowPosition(int x, int y) - устанавливаем начальное расположение окна. В моем случае 0, 0 - то есть левый верхний угол. Функция ничего не возвращает.

glutCreateWindow(char* title) - исходя из выше полученных параметром инициализирует новое окно. Важен порядок вызова этих функций. Принимает в качестве аргумента строку - заголовок окна. Возвращает ID инициализированного окна.

glutDisplayFunc(void* (callback)()) - принимает в качестве аргумента указатель на функцию, которая отвечать за рисование в окне. В моем случае это функция GLRenderScene(). Сама передаваемая функция не должна ни принимать не возвращать каких либо параметров.

glutMainLoop() - запускаем главный цикл. Есть просто бесконечно идущий цикл. Этот цикл все время обрабатывает поступившиеся сообщения от пользователя. И в зависимости от сообщений реагирует на них. Например. Пользователь хочет перерисовать содержимое окна. Этот самый цикл ловит это сообщение, и проверяет есть ли функция ответственная за такую операцию. В моем случае я указал, что за перерисовку отвечает функция GLRenderScene(). Видя, что такая функция существует, этот цикл вызовет ее. И пойдет еще раз по кругу, проверяя все новые и новые сообщения.

Если мы запустим этот код, то у нас появиться консоль и пустое бесцветное окно. Ею мы можем двигать, уменьшать или увеличивать, свернуть, закрыть и т.д. Отличное окно у нас есть теперь начнем рисовать.

-3

glClear (unsigned int mask) - чтобы хранить какую либо информацию, требуется место в памяти ПК. Это место и называется буфером. Данная функция очищает указанный буфер. Все их четыре. В качестве параметра передается значение или константа этого значения, а так же их комбинация с помощью побитового - | . В нашем случае мы очищает буфер цвета. То есть все что было нарисовано, очищается из памяти.

glutSwapBuffers() - функция не принимает ничего в качестве параметров, а просто меняет местами используемые буфера для рисования(ранее мы указали, что будет использовать два буфера для рисования(GLUT_DOUBLE)).

В итоге получился такой код...

-4

...и если запустить у нас появиться консоль и окно с черным фоном.

-5

В следующем уроке познакомимся с системой координат, а так же нарисуем наш первый примитив.

Следующий урок ->

Понравилась статья? Ставь лайк и подпишись на канал. Если есть вопросы, то оставляйте комментарии.