Лабораторные работы №1,2 - Open GL / lab1 / Лаб1 VS
.docЛабораторная работа №1
1 ТЕОРЕТИЧЕСКАЯ ЧАСТЬ
OpenGL (Open Graphics Library — открытая графическая библиотека, графический API) — спецификация, определяющая независимый от языка программирования платформонезависимый программный интерфейс для написания приложений, использующих двухмерную и трёхмерную компьютерную графику.
На базовом уровне, OpenGL — это просто спецификация, то есть документ, описывающий набор функций и их точное поведение. Производители оборудования на основе этой спецификации создают реализации — библиотеки функций, соответствующих набору функций спецификации. Реализация призвана эффективно использовать возможности оборудования. Если аппаратура не позволяет реализовать какую-либо возможность, она должна быть эмулирована программно. Производители должны пройти специфические тесты (conformance tests — тесты на соответствие) прежде чем реализация будет классифицирована как OpenGL-реализация. Таким образом, разработчикам программного обеспечения достаточно научиться использовать функции, описанные в спецификации, оставив эффективную реализацию последних разработчикам аппаратного обеспечения.
Существует ряд библиотек, созданных поверх или в дополнение к OpenGL. Например, библиотека GLU, являющаяся практически стандартным дополнением OpenGL и всегда её сопровождающая, построена поверх последней, то есть использует её функции для реализации своих возможностей. Другие библиотеки, как, например, GLUT и SDL, созданы для реализации возможностей, недоступных в OpenGL. К таким возможностям относятся создание интерфейса пользователя (окна, кнопки, меню и др.), настройка контекста рисования (область рисования, использующаяся OpenGL), обработка сообщений от устройств ввода/вывода (клавиатура, мышь и др.), а также работа с файлами. Обычно, каждый оконный менеджер имеет собственную библиотеку-расширение для реализации вышеописанных возможностей, например, WGL в Windows или GLX в X Window System, однако библиотеки GLUT и SDL являются кросс-платформенными, что облегчает перенос написанных приложений на другие платформы.
2 УСТАНОВКА БИБЛИОТЕК
Для установки графических библиотек нам потребуются файлы: glut.dll glut32.dll glut.h glut.lib glut32.lib, glaux.lib, glaux.h.
Далее, для интеграции в среду разработки MVS 2010 нам потребуется выполнить следующие шаги:
1) glut.dll and glut32.dll копировать в С:\windows\system32
2) glut.h и glaux.h копировать в: (папка компилятора)\\include
3) glut.lib glut32.lib glaux.lib копировать в: (папка компилятора)\\lib
Следующим этапом станет подключение библиотек к проекту. Создадим пустой консольный проект в среде разработки. Щелчком правой кнопки мыши по названию проекта выберем: Свойства---подпункт Компоновщик---Ввод (рис. 2.1).

Рисунок 2.1 – Свойства компоновщика
Далее, в пункте «Дополнительные зависимости» вводим названия подключаемых библиотек (пункт «Изменить» выпадающего меню), как указано на рис. 2.2.

Рисунок 2.2 – Подключение библиотек.
Для использования графических примитивов потребуется включить их в проект директивами:
#include <glut.h>
#include <glaux.h>
3 ПРИМЕР ПРОГРАММЫ
Рассмотрим небольшой пример, предварительно ознакомившись с необходимыми командами.
glColor3f требует три вещественных (float) чисел, а glColor3i - тройку целых (int) чисел. Аналогичный синтаксис имеют и другие команды OpenGL. Записи функций в вещественной форме аргументы лежат в интервале [0,1], а в целочисленной форме - линейно отображаются на этот интервал, т.е. для задания белого цвета целочисленная форма будет выглядеть:
glColor3i (2147483647, 2147483647, 2147483647); // цвет примитивов
glBegin(GL_POLYGON) – определяет точку входа в процесс рисования графического примитива.
glVertex3f(0.25,0.25,0.0) – имеет формат по аналогии с glColor, однако принимает в качестве аргументов – координаты точек по трем осям координат. В случае с рисованием двумерных фигур координата по оси пространства остается нулевой.
glEnd() – определяет окончание рисования примитива, заданного в glBegin.
glMatrixMode(GL_PROJECTION) – устанавливает проекцию отображения. По умолчанию – ортогональная.
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB) - устанавливает свойства окна отрисовки и цветовую модель.
glutInitWindowSize(600,600) – устанавливает размер окна в пикселях
glutInitWindowPosition(100,100) – устанавливает позицию окна на экране
glutCreateWindow("Polygon") - создает окно с заданным именем
Перейдем непосредственно к коду программы.
#include <windows.h>
#include <glut.h>
#include <glaux.h>
void Initialize()
{
//Выбрать фоновый (очищающий) цвет
glClearColor(234.0,0.0,56.0,1.0);
//Установить проекцию
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0,1.0,0.0,1.0,-1.0,1.0);
}
void Draw()
{
//Очищаем экран glClear(GL_COLOR_BUFFER_BIT);
//Отрисовка квадрата
glColor3f(-1.0,1.0,-1.0); //Выбираем красный цвет
glBegin(GL_POLYGON);
glVertex3f(0.25,0.25,0.0); //Координаты квадрата
glVertex3f(0.75,0.25,0.0);
glColor3f(1.0,-1.0,-1.0); //Выбираем зеленый цвет
glVertex3f(0.75,0.75,0.0);
glVertex3f(0.25,0.75,0.0);
glEnd();
//New
glColor3f(1.0,1.0,-1.0); //Выбираем лимонный цвет
glBegin(GL_POLYGON);
glVertex3f(0.55,0.55,0.0); //Координаты квадрата
glColor3f(1.0,1.0,-1.0);//Выбираем синий цвет
glVertex3f(0.105,0.55,0.0);
glVertex3f(0.105,0.105,0.0);
glColor3f(0.0,1.0,1.0); //Выбираем голубой цвет
glVertex3f(0.55,0.105,0.0);
glEnd();
//New
glColor3f(1.0,-1.0,-1.0); //Выбираем алый цвет
glBegin(GL_POLYGON);
glVertex3f(0.15,0.15,0.0);// выбираем желтый цвет
glColor3f(1.0,1.0,0.0); //Координаты треугольника
glVertex3f(0.5,0.15,0.0);
glColor3f(1.0,-1.0,0.0); // выбирае моранжевый цвет
glVertex3f(0.5,0.5,0.0);
glEnd();
glFlush();
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);// Очистка экрана и буфера глубины
}
//Войти в главный цикл
int main(int argc, char **argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
glutInitWindowSize(600,600); //Указываем размер окна
glutInitWindowPosition(100,100); //Позиция окна
glutCreateWindow("Polygon"); //Имя окна
Initialize(); //Вызов функции Initialize
glutDisplayFunc(Draw); //Вызов функции отрисовки
glutMainLoop();
return 0;
}
Следует заметить, что, устанавливая для каждой точки свой цвет, можно добиться градиентной заливки. Результат работы представлен на рис. 3.1.

Рисунок 3.1 – Работа программы
4 ЗАДАНИЕ
Используя примитивы «точка», «линия», «треугольник», «четырехугольник» и «многоугольник» изобразить фигуру, указанную в варианте.
Варианты заданий:
|
1. |
|
9. |
|
|
|
|
2. |
|
10. |
|
|
|
|
3. |
|
11. |
|
|
|
|
4. |
|
12. |
|
|
|
|
5. |
|
13. |
|
|
|
|
6. |
|
14. |
|
|
|
|
7. |
|
15. |
|
|
|
|
8. |
|
16. |
|
||
|
17. |
|
18. |
|
||
|
19. |
|
20. |
|
||
5 КОНТРОЛЬНЫЕ ВОПРОСЫ
1) Опишите состав библиотек OpenGL.
2) Каким образом OpenGL интегрируется в выбранную среду разработки?
3) Как программно описывается отрисовка примитива?
4) Опишите функцию указания координат вершины фигуры. Какие параметры она принимает?
5) Опишите функцию установления цвета. Какие параметры она принимает?




















