Данная статья поможет в установке и настройке необходимого программного обеспечения для создания своей первой программы с использованием OpenGL. А так же даст базовое представление о OpenGL. Заранее обусловимся, что будем писать под Windows и на языке C++.

OpenGL и с чем его едят

OpenGL (Open Graphics Library) — открытая графическая библиотека. И представляет собой набор функции для отображения двухмерной и трехмерной графики. Широко используется в компьютерных играх.

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

Что нам необходимо

А необходимо нам совсем немного.

Во первых, нам нужно это Microsoft Visual Studio (в дальнейшем просто VS). Можно поставить Express или получить по студенческому лицензионную версию Professional  по программе DreamSpark. Разумеется нас интересует С++ компилятор и желательно поставить 2008 версию, так как я буду выкладывать готовые примеры именно для этой версии. Категорически рекомендуется поставить MSDN.

Так же нужен GLUT, скачать его можно по этой ссылке (в архиве, который я прикрепил уже все настроено).

Возьмите файлы glut.h и glut32.lib и скопируйте в папку GL. Папка GL должна быть в одном каталоге с нашим проектом.

Первый проект

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

Шаг 1.

Открываем VS. Дальше «File->New->Project».

Открываем раздел Visual C++ в “Project types”. Выбираем “Empty Project” (Пустой проект). В поле “Name” пишем имя нашего проекта. Допустим “Start”. Снимаем галку с “Create directory for solution”, к чему нам лишние директории. Теперь нажимаем кнопку “OK”.

Шаг 2.

Нужно настроить подключаемые библиотеки.

Правой кнопкой жмем по имени проекта «Start» и заходим в «Properties». Дальше в раздел «Configuration properties» и вкладку «Linker», потом в вкладку «Input». Теперь добавим «glut32.lib».

Или напишем в исходном коде в шаге 4, строчку в самом вверху «#pragma comment (lib, «..\\GL\\glut32.lib»)».

Заходим

Шаг 3.

В окне “Solution Explorer” видим наш проект “Start”. Нажимаем правой кнопкой по папке “Source Files”, после в контекстном меню выбираем “Add->New Item”.

Выбираем в “Templates” тип “С++ file (.cpp)”, а в поле “Name” пишем “main.cpp”. Поле “Location” оставляем без изменений.  Теперь нажимаем по кнопке “Add”.

Шаг 4.

И пишем код в наш созданный файл “main.cpp”.

  1. #include "../GL/glut.h"
  2. //
  3. // Reshape
  4. //
  5. void Reshape ( int width, int height )
  6. {
  7. glViewport(0, 0, width, height);
  8. glMatrixMode(GL_PROJECTION);
  9. glLoadIdentity();
  10. gluOrtho2D(-1, 1, -1, 1);
  11. glMatrixMode(GL_MODELVIEW);
  12. }
  13. //
  14. // Draw
  15. //
  16. void Draw ( void )
  17. {
  18. glClear(GL_COLOR_BUFFER_BIT);
  19. glColor3f(0.0f, 0.0f, 1.0f);
  20. glLineWidth(1);
  21. // Рисуем
  22. glBegin(GL_LINES);
  23. glVertex2f(0, 0.5f);
  24. glVertex2f(0, -0.5f);
  25. glEnd();
  26. glFlush();
  27. }
  28. //
  29. // main
  30. //
  31. int main ( int argc, char *argv[] )
  32. {
  33. glutInit(&argc, argv);
  34. glutInitWindowSize(400, 300);
  35. glutInitWindowPosition(100, 100);
  36. glutInitDisplayMode(GLUT_RGB);
  37. glutCreateWindow("First demo");
  38. // Установка функций которые отвечают за отрисовку и изменение формы окна
  39. glutReshapeFunc(Reshape);
  40. glutDisplayFunc(Draw);
  41. glClearColor(0, 0, 0, 0);
  42. glutMainLoop();
  43. return 0;
  44. }
  45.  

* This source code was highlighted with Source Code Highlighter.

Код также доступен здесь

Как оно работает

Мы будем использовать на первых порах, такую библиотеку для OpenGL, как GLUT (от GL Utility Toolkit). Дело в том, что как уже вы знаете, OpenGL является кроссплатформенным, но если вы захотите создать оконный интерфейс, то вам нужно будет писать код для каждой операционной системы (ОС) в отдельности. Ведь у каждой ОС свои особые функции по созданию окон. Тут и приходит нам в помощь библиотека GLUT, с помощью нее мы можем использовать единый интерфейс для работы с окнами независимо от ОС. И наш код будет работать как под Windows, так и под Linux и т.д.

Наша программа должна состоять из следующих шагов:

•  Инициализация GLUT

•  Установка параметров окна.

•  Создание окна.

•  Установка функций, отвечающих за рисование в окне и изменении формы окна.

•  Вход в главный цикл GLUT.

А теперь обо всем по порядку. Как видите у нас здесь три функции: main, Draw и Reshape.

Посмотрим main.

Каждая программа с использованием GLUT, должна начинаться с инициализации GLUT. glutInit – главная инициализирующая функция.

void glutInit(int *argc, char **argv)

Первый параметр представляет из себя указатель на количество аргументов в командной строке, а второй — указатель на массив аргументов. Обычно эти значения берутся из главной функции программы:

int main(int argc, char *argv[])

Теперь займемся размерами и позицией окна. Заранее хочу сказать, что здесь все измеряется в пикселях. Начало координат лежит в левом верхнем углу экрана.

void glutInitWindowSize(int width, int height)

void glutInitWindowPosition(int x, int y)

В качестве параметров для этих функций мы передаем: width – ширина, height – высота. x – позиция по x, y – позиция по y (позиция левого верхнего угла окна).

Укажем режим отображения на экране.

void glutInitDisplayMode(unsigned int mode)

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

Константа Значение

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

GLUT_RGBA То же что и RGB, но используется также 4 компонента ALPHA (прозрачность).

GLUT_INDEX Цвет задается не с помощью RGB компонентов, а с помощью палитры. Используется для старых дисплеев, где количество цветов например 256.

GLUT_SINGLE Вывод в окно осуществляется с использованием 1 буфера. Обычно используется для статического вывода информации.

GLUT_DOUBLE Вывод в окно осуществляется с использованием 2 буферов. Применяется для анимации, чтобы исключить эффект мерцания.

GLUT_ACCUM Использовать также буфер накопления (Accumulation Buffer). Этот буфер применяется для создания специальных эффектов, например отражения и тени.

GLUT_ALPHA Использовать буфер ALPHA. Этот буфер, как уже говорилось используется для задания 4-го компонента цвета — ALPHA. Обычно применяется для таких эффектов как прозрачность объектов и антиалиасинг.

GLUT_DEPTH Создать буфер глубины. Этот буфер используется для отсечения невидимых линий в 3D пространстве при выводе на плоский экран монитора.

GLUT_STENCIL Буфер трафарета используется для таких эффектов как вырезание части фигуры, делая этот кусок прозрачным. Например, наложив прямоугольный трафарет на стену дома, вы получите окно, через которое можно увидеть что находится внутри дома.

GLUT_STEREO Этот флаг используется для создания стереоизображений. Используется редко, так как для просмотра такого изображения нужна специальная аппаратура.

Т.е. например:

glutInitDisplayMode(GLUT_RGB | GLUT_STEREO);

Наконец мы может теперь создать наше окно.

int glutCreateWindow(const char *title)

Функция создать окно с заголовком, которые вы указали в качестве параметра. А в качестве результата вернет handler окна в виде int числа. Его использует обычно для операций над окном, таких как закрытие или изменение параметров окна.

Дальше нам следует установить функции, отвечающие за отрисовку и изменение размеров окна. Начнем с функции по изменению размеров окна.

void glutReshapeFunc(void (*func)( int width, int height))

В качестве параметра указатель на функцию, которая отвечает за изменеие размеров окна, и которая должна, как вы уже заметели, принимать параметры width и height, ширину и высоту соотвественно.  Для нашего примера это функция Reshape.

Теперь разберемся с отрисовкой окна.

void glutDisplayFunc(void (*func)( void))

В качестве параметра опять же указатель на функцию, которая уже рисует окно. У нас это функция Draw.

Остается нам только войти в главный цикл GLUT. Этот цикл запускает на выполнение, так называемое сердце GLUT, которое обеспечивает взаимосвязь между операционной системой и теми функциями, которые отвечают за окно, получают информацию от устройств ввода/вывода. Делаем мы это с помощью следующей команды:

void glutMainLoop(void)

Вот и все, мы разобрали основные функции по инициализации окна. Теперь вы сможете собрать нашу программу и посмотреть как рисуется синия линия посреди экрана.

P.S. Что касается VS 2010, то настройка проекта происходит точно так же.

Реклама