Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
13
Добавлен:
07.02.2016
Размер:
4.52 Mб
Скачать

Лабораторная работа №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) Опишите функцию установления цвета. Какие параметры она принимает?

Соседние файлы в папке lab1