- •Московский институт электронной техники
- •Введение.
- •Подключение графической библиотеки 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 <windows.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.
Запустим VISUAL C++ и в главном меню в пункте 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 – Properties – Configuration Properties. Выбираем пункты Linker – Command Line , и в окне Additional options, добавим библиотечные файлы opengl32.lib, glu32.lib библиотеки OpenGL, и библиотечный файл glaux.lib библиотеки GLAUX. После щелчка OK компилятор VC++ будет настроен нужным образом.
Замечание. Если при компиляции программы возникнут проблемы с функцией auxInitWindow(), то надо сменить кодировку символов. Для этого, в главном меню в пункте Project пройдем по цепочке: Project – Properties – Configuration Properties. Выбираем пункты General – Character Set, и устанавливаем значение Use Multi-Byte Character Set.
Функцию 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, но с синим фоном.