Разработка графических приложений с использованием библиотеки OpenGL

Автор: Пользователь скрыл имя, 27 Февраля 2012 в 21:25, курсовая работа

Описание работы

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

Содержание

Введение
1 Работа с двухмерными примитивами
1.1 Теоретическая часть создания двухмерного изображения
1.2 Практическая часть создания двухмерного изображения
2 Работа с трехмерными примитивами
1.2 Теоретическая часть создания трехмерного примитива
2.2 Практическая часть создания трехмерного примитива
3 Построение криволинейных поверхностей и работа с клавиатурой
3.1 Теоретическая часть создания криволинейной поверхности
3.2 Практическая часть создания криволинейной поверхности 19
Заключение
Список использованной литературы

Работа содержит 1 файл

Kursovaya моя.doc

— 1.43 Мб (Скачать)


ФЕДЕРАЛЬНОЕ АГЕНСТВО ПО ОБРАЗОВАНИЮ РФ
Государственное образовательное учреждение высшего профессионального образования «Пензенский филиал Российского государственного университета инновационных технологий и предпринимательства»
Кафедра «Управления информационными ресурсами»

 

 

 

 

 

О Т Ч Е Т
по курсовой работе

дисциплина: «Компьютерная графика и анимация»

тема: «Разработка графических приложений с использованием библиотеки OpenGL»

Вариант № 12

 

 

 

 

 

 

 

Выполнила: ст.гр. 10С1

           Царяпкина Ю. Ю.

Проверил: к.т.н., доцент

    Такташкин Д. В.

 

 

Пенза 2011

РЕФЕРАТ

                              

Пояснительная записка содержит: 24 страниц, 12 графических объектов.

Цель курсового проекта: показать знания в области компьютерной графики и анимации и использования библиотеки OpenGL для разработки графических приложений.

В процессе создания курсового проекта был использован язык про­граммирования С++, приложение Microsoft Word.

 

 

 


Содержание

Введение

1 Работа с двухмерными примитивами

1.1 Теоретическая часть создания двухмерного изображения

1.2 Практическая часть создания двухмерного изображения

2 Работа с трехмерными примитивами

1.2 Теоретическая часть создания трехмерного примитива

2.2 Практическая часть создания трехмерного примитива

3 Построение криволинейных поверхностей и работа с клавиатурой

3.1 Теоретическая часть создания криволинейной поверхности

3.2 Практическая часть создания криволинейной поверхности              19

Заключение

Список использованной литературы


Введение

OpenGL – это программный интерфейс к графической аппаратуре. Этот интерфейс состоит приблизительно из 250 отдельных команд (около 200 команд в самой OpenGL и еще 50 в библиотеке утилит), которые используются для указания объектов и операций, которые необходимо выполнить, чтобы получить интерактивное приложение, работающее с трехмерной графикой.

Библиотека OpenGL разработана как обобщенный, независимый интерфейс, который может быть реализован для различного аппаратного обеспечения. По этой причине сама OpenGL не включает функций для создания окон или для захвата пользовательского ввода; для этих операций вы должны использовать средства той операционной системы, в которой вы работаете. По тем же причинам в OpenGL нет высокоуровневых функций для описания моделей трехмерных объектов. Такие команды позволили бы вам описывать относительно сложные фигуры, такие как автомобили, части человеческого тела или молекулы. При использовании библиотеки OpenGL вы должны строить необходимые модели при помощи небольшого набора геометрических примитивов – точек, линий и многоугольников (полигонов).

Тем не менее, библиотека, предоставляющая описанные возможности может быть построена поверх OpenGL. Библиотека утилит OpenGL (OpenGL Utility Library – GLU) предоставляет множество средств для моделирования, например, квадрические поверхности, кривые и поверхности типа NURBS. GLU – стандартная часть любой реализации OpenGL. Существуют также и более высокоуровневые библиотеки, например, Fahrenheit Scene Graph (FSG), которые построены с использованием OpenGL и распространяются отдельно для многих ее реализаций.

Характерными особенностями OpenGL, которые обеспечили распространение и развитие этого графического стандарта, являются:

Стабильность – дополнения и изменения в стандарте реализуются таким образом, чтобы сохранить совместимость с разработанным ранее программным обеспечением;

Надежность – приложения, использующие OpenGL, гарантируют одинаковый визуальный результат вне зависимости от типа используемой операционной системы и организации отображения информации;

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

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

1. Конструирует фигуры из геометрических примитивов, создавая математическое описание объектов (примитивами в OpenGL считаются точки, линии, полигоны, битовые карты и изображения).

2. Позиционирует объекты в трехмерном пространстве и выбирает точку наблюдения для осмотра полученной композиции.

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

4. Преобразует математическое описание объектов и ассоциированной с ними цветовой информации в пиксели на экране. Этот процесс называется растеризацией (или растровой разверткой).

В течение всех этих этапов OpenGL может производить и другие операции, например, удаление частей объектов, скрытых другими объектами.

На сегодняшний день графическая система OpenGL поддерживается большинством производителей аппаратных и программных платформ. Эта система доступна тем, кто работает в среде Windows, пользователям компьютеров Apple [1, 2].

1       Работа с двухмерными примитивами

1.1 Теоретическая часть создания двухмерного изображения

Примитив – это фигура, такая как точка, линия, многоугольник, прямоугольник пикселей или битовый массив, которая рисуется, хранится и которой манипулируют как единой дискретной сущностью. Другими словами, примитивы – это те элементы, из которых строятся графические объекты любой степени сложности. Они определяются группами из одной или нескольких вершин, каждая из которых имеет ассоциированные с ней данные [1, 3, 4]. Примитив или группа однотипных примитивов, к которым относятся точки, линии, связанные линии, замкнутые линии, треугольники, связанные треугольники с общим ребром, связанные треугольники с общей вершиной, четырехугольники, связанные четырехугольники и многоугольники, определяются внутри командных скобок glBeginfglEnd.

Базовый примитив треугольник

Значение параметра GL_TRIANGLES. Для треугольника можно задавать те же параметры, что и для линии плюс есть еще одна функция glPolygonMode. Она устанавливает опции для отрисовки многоугольника. Первый параметр может принимать значения – GL_FRONT, GL_BACK и GL_FRONT_AND_BACK. Второй параметр указывает, как будет рисоваться многоугольник. Он принимает значения – GL_POINT (рисуются только точки), GL_LINE (рисуются линии) и GL_FILL (рисуется заполненный многоугольник). Первый параметр указывает к лицевой, тыльной или же к обеим сторонам применяется опция, заданная вторым параметром. Рассмотрим фрагмент кода, создающий базовый примитив треугольник и визуальный результат его выполнения (рис. 1).

 

Рис. 1. Базовый примитив треугольник

glLineWidth(2);

glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);

glBegin(GL_TRIANGLES); // открываем операторные скобки для треугольника

glColor3d(1,0,0);     

glVertex2f(150,400);

glVertex2f(350,250);

glVertex2f(100,200);

glEnd();

Каждая тройка вершин рассматривается как независимый треугольник. Вершины (3n–2), (3n–1) и 3n (в таком порядке) определяют треугольник n. Если число вершин не кратно 3, то оставшиеся (одна или две) вершины игнорируются. Всего рисуется N/3 треугольника.

Базовый примитив четырехугольник

Значение параметра GL_QUADS или GL_QUAD_STRIP. Рассмотрим фрагмент кода, создающий базовый примитив четырехугольник и визуальный результат его выполнения.

Рис. 2. Базовый примитив четырехугольник

Рис. 3. Примитив из связанных четырехугольников

 

glLineWidth(3);

glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);

glBegin(GL_QUADS); // открываем операторные  скобки для четырехугольника

glColor3d(0,1,1);

glVertex2f(10,480);  // вершина 1

glVertex2f(150,460); // вершина 2

glVertex2f(130,350); // вершина 3

glVertex2f(40,370);  // вершина 4

glEnd();               // закрываем операторные  скобки для четырехугольника

Четырехугольники рисуются вызовом функции glBegin с параметром GL_QUADS или GL_QUAD_STRIP. Для первого случая (рис. 2) каждые четыре вершины определяют свой четырехугольник. Во втором случае (рис. 3) рисуются связанные четырехугольники. Первая, вторая, третья и четвертая вершина определяют первый четырехугольник. Третья, четвертая, пятая и шестая вершина – второй четырехугольник и т.д. (2n–1), 2n, (2n+1) и (2n+2) вершины задают n-ый четырехугольник.

Базовый примитив многоугольник

Значение параметра GL_POLYGON. Рассмотрим фрагмент кода, создающий базовый примитив многоугольник и визуальный результат его выполнения (рис. 4).

Рис.4. Базовый примитив многоугольник

glLineWidth(2);

glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);

glBegin(GL_POLYGON); // открываем операторные скобки  для многоугольника

glColor3d(0,1,1);

glVertex2f(10,480);  // вершина 1

glVertex2f(150,460); // вершина 2

glVertex2f(130,380); // вершина 3

glVertex2f(40,370);              // вершина 4

glVertex2f(10,410);              // вершина 5

glVertex2f(80,420); // вершина 6

glEnd(); // закрываем операторные скобки для четырехугольника

Как правило, разные типы примитивов имеют различную скорость визуализации на разных платформах. Для увеличения производительности предпочтительнее использовать примитивы, требующие меньшее количество информации для передачи на сервер, такие как GL_TRIANGLE_STRIP, GL_QUAD_STRIP, GL_TRIAGLE_FAN.


1.2 Практическая часть создания двухмерного изображения

Дано: В данной задаче требуется разработать программу на языке программирования С++ с использованием графической библиотеки OpenGL, которая создает двухмерное изображение (рис.5). Для данной задачи требуемый рисунок необходимо создать, используя базовые примитивы: треугольник, четырехугольник и многоугольник.

Рис.5. Исходное двухмерное изображение

Ход работы:

#include "glut.h"

GLint Width = 500, Height = 500;

void Display()

{

glClearColor(1, 1, 1, 1);

glClear(GL_COLOR_BUFFER_BIT);

 

 

// Создаем незаполненный многоугольник             

glLineWidth(2);

glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);

glBegin(GL_POLYGON);

glColor3d(0,0,0);

glVertex2f(250,500); 

glVertex2f(300,300);

glVertex2f(425,250);

glVertex2f(300,225);             

glVertex2f(250,0);             

glVertex2f(200,225);

glVertex2f(75,250);

glVertex2f(200,300);

glEnd();

 

// Создаем треугольник

glLineWidth(2);

glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);

glBegin(GL_TRIANGLE_STRIP);

glColor3d(0,1,0.8);     

glVertex2f(0,350);

glVertex2f(150,500);

glVertex2f(0,0);

glEnd();

 

// Создаем незаполненный четырехугольник

glLineWidth(3);

glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);

glBegin(GL_QUADS);                                                                      

glColor3d(0,0,0);

glVertex2f(150,500); 

glVertex2f(500,500);

glVertex2f(350,0);

glVertex2f(0,0);             

glEnd();

 

// Создаем четыре связных линий

glLineWidth(2);

glBegin(GL_LINE_STRIP);

glColor3d(0,0,0);

glVertex2f(175,375); 

glVertex2f(175,325);

glVertex2f(125,325); 

glEnd();

 

glLineWidth(2);

glBegin(GL_LINE_STRIP);

glColor3d(0,0,0);

glVertex2f(325,375); 

glVertex2f(325,325);

glVertex2f(375,325); 

glEnd();

 

glLineWidth(2);

glBegin(GL_LINE_STRIP);

glColor3d(0,0,0);

glVertex2f(375,175); 

glVertex2f(325,175);

glVertex2f(325,125); 

glEnd();

 

glLineWidth(2);

glBegin(GL_LINE_STRIP);

glColor3d(0,0,0);

glVertex2f(125,175); 

glVertex2f(175,175);

glVertex2f(175,125); 

glEnd();

 

glFinish();

}

void Reshape(GLint w, GLint h) // Функция вызывается при изменении размеров окна

                              

{

Width = w;

Height = h;

glViewport(0, 0, w, h); // Устанавливаем размеры области отображения

 

/* Устанавливаем матрицу проективного преобразования, делаем ее единичной и  устанавливаем матрицу видового преобразования*/

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

glOrtho(0, w, 0, h, -1.0, 1.0);

glMatrixMode(GL_MODELVIEW);

}

void main() // Главный цикл приложения

{

 

glutInitDisplayMode(GLUT_RGB); // Инициализирует буфер кадра и настраивает   

                               // полноцветный режим RGB

glutInitWindowSize(Width, Height);

glutCreateWindow("OpenGL");

glutDisplayFunc(Display);

glutReshapeFunc(Reshape);

glutMainLoop(); // Контроль всех событий и вызов нужных функций внутри

                // бесконечного цикла в функции glutMainLoop()

}

 

 

Рис. 6. Результирующее двухмерное изображение

В результате работы программы получаем двухмерное изображение (рис.6), для построения которого использовались такие базовые примитивы, как четырехугольник, многоугольник, треугольник и линии.


2 Работа с трехмерными примитивами

1.2 Теоретическая часть создания трехмерного примитива

Базовые трехмерные примитивы

Информация о работе Разработка графических приложений с использованием библиотеки OpenGL