- •Московский институт электронной техники
- •Введение.
- •Подключение графической библиотеки OpenGl в программах Win32.
- •Создание консольного приложения Windows для работы с библиотекой OpenGl.
- •Интерактивное взаимодействие с OpenGl в оконном режиме Windows.
- •Двойная буферизация.
- •Двойная буферизация OpenGl в оконном приложении Windows.
- •Двойная буферизация OpenGl в консольном приложении Windows.
- •Создание 2d объектов с помощью графической библиотеки OpenGl.
- •Пример создания 3d объектов с помощью графической библиотеки OpenGl.
- •Использование таймера для моделирования движения 3d-объектов OpenGl в оконном приложении Windows.
- •Моделирование движения 3d-объектов OpenGl без таймера в консольном приложении Windows.
- •Задание к работе.
- •Варианты к лабораторной работе.
Создание консольного приложения Windows для работы с библиотекой OpenGl.
Если нас не интересует графика, которую предоставляет система Windowsв видеAPI-функций, то можно создать приложение в консольном режиме, и пользоваться только библиотекойOpenGL.
Покажем, как можно создать проект в консольном режиме для работы сOpenGL. Пусть проект находится в папкеglopen02. В файлеglopen02.cppбудет находиться код программы, содержащий главную функциюmain, внешне похожую на главную функциюDOS-программы. Однако это только внешнее сходство, функцияmainбудет получать сообщения, и обрабатывать их. Для обработки сообщений будут использоваться функции библиотекиGLAUX. Поэтому эту библиотеку надо подключить к программе.
Ниже показана структура функции main.
#include <afxwin.h>
#include <gl\gl.h>
#include <gl\glu.h>
#include <gl\glaux.h>
void DrawOpenGL(void);
void main()
{
//определяем окно для рисования на экране
auxInitPosition(100, 50, 600, 450);
//устанавливаем режимы работы OpenGL
auxInitDisplayMode(AUX_SINGLE | AUX_RGB);
//производит регистрацию окна в операционной системе
auxInitWindow("Console Application");
//обрабатывает сообщения,
//вызывается функция DrawOpenGL в ответ на сообщение WM_PAINT
auxMainLoop((AUXMAINPROC)DrawOpenGL);
}
Чтобы настроить проект в консольном режиме на работу с OpenGLнадо вручную добавить нужные библиотеки.
Рассмотрим создание проекта. Пусть рабочий каталог Workнаходится на дискеD.
Запустим VISUALC++ и в главном меню в пунктеFileпройдем по цепочке:File – New – Project, где выбираем пунктWin32 Console Application. В окнеLocationуказываем путьD:\Work\, в окнеProject nameнабираемglopen02, нажимаемOK.
Далее выбираем пункт An empty project, нажимаемFinishи нажимаемOK.
После этого в каталоге D:\Workпоявится подкаталогglopen02. Поместим в этот каталогD:\Work\glopen02 файл glopen02.cpp, и продолжим создавать проект.
В главном меню слева имеется окно (Workspace) у которого внизу две надписиClassViewиFileView. ВыбираемFileViewи вверху слева щелкаем по плюсу +.
Подводим мышку к надписи Source filesи щелкаем правой кнопкой. В появившемся маленьком меню выбираем пунктAdd Files to Folder. Указываем путь к файлуglopen02.cpp, в рассматриваемом случае этот путь следующийD:\Work\glopen02\. Подсоединяем файлglopen02.cppк проекту. В результате у пунктаSource filesпоявится плюс +.
В главном меню в пункте Projectпройдем по цепочке:Project – Settings – Link. В окнеObject/library modulesдобавим библиотечные файлыopengl32.lib, glu32.libбиблиотекиOpenGLи библиотечный файлglaux.libбиблиотекиGLAUX. После щелчкаOKпроект будет настроен нужным образом.
Функцию DrawOpenGLвозьмем из программыglopen01.cpp, оставив в ней только функции рисованияOpenGL.
//рисуем графические объекты
void DrawOpenGL(void)
{
//устанавливаем двухмерную ортогональную область просмотра
//определяем работу с матрицей проекции
glMatrixMode(GL_PROJECTION);
//заменяет текущую матрицу единичной
glLoadIdentity();
//устанавливаем двухмерную ортогональную область просмотра
gluOrtho2D(-400, 400, -300, 300);
//устанавливаем текущий цвет
glColor3f(0.0, 1.0, 0.0);
//рисуем треугольник
glBegin(GL_TRIANGLES);
glVertex2f(-100, -100);
glVertex2f(0, 100);
glVertex2f(100, -100);
glEnd();
//устанавливаем текущий цвет
glColor3f(1.0, 0.0, 0.0);
//толщина линий - 6 пикселей
glLineWidth(6.0);
//рисуем связанную группу отрезков
glBegin(GL_LINE_STRIP);
glVertex2f(0, 150);
glVertex2f(150, -130);
glVertex2f(-150, -130);
glVertex2f(0, 150);
glEnd();
//блокирует выполнение программы, пока не будут
//выполнены все вызванные перед ней команды OpenGL
glFinish();
}
Результат работы программы показан на Рис.2.
Рис.2. Изображение создано в консольном режиме. Цвет фона черный. |
Рис.3. Изображение создано в консольном режиме. Цвет фона синий. |
(Изображения на Рис.2, 3 созданы программой glopen02.cpp.)
Черный фон на Ри.2 можно сделать любого цвета. Ниже приводится код, который создает синий цвет фона.
//задаем цвет фона
glClearColor(0,0,0.5, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
На Рис.3 показан тот же результат, что и на Рис.2, но с синим фоном.