Автор работы: Пользователь скрыл имя, 07 Апреля 2013 в 14:49, курсовая работа
OpenGL является одним из самых популярных прикладных программных интерфейсов (API – Application Programming Interface) для разработки приложений в области двумерной и трехмерной графики. Стандарт OpenGL (Open Graphics Library – открытая графическая библиотека) был разработан и утвержден в 1992 году ведущими фирмами в области разработки программного обеспечения как эффективный аппаратно-независимый интерфейс, пригодный для реализации на различных платформах. Основой стандарта стала библиотека IRIS GL, разработанная фирмой Silicon Graphics Inc. Библиотека насчитывает около 120 различных команд, которые программист использует для задания объектов и операций, необходимых для написания интерактивных графических приложений.
Постановка задачи.......................................................................................2
Основные свойства OpenGL……................................................................3
Описание проекта «Виртуальная картинная галерея»……………….....8
Проектировщик………………..................................................................9
Интерфейс пользователя.......................................................................10
Описание кода программы…………………...........................................11
Раннер. Интерфейс пользователя……………………………………….14
Описание кода программы………..……………………………………15
Заключение……………………………………………………………….19
Список литературы………………………………………………………20
Оглавление
Постановка задачи
Задача- создание виртуальной картинной галереи средствами OpenGL, с возможностью изначального проектирования самой галереи.
Для создания этого программного продукта поставлены и решены следующие подзадачи:
Проектировщик(планировщик) при процессе проектирования использует обозрение «вид сверху». В ходе проектирования пользователь устанавливает стены помещения и указывает места дальнейшего расположения картин .
В окончательной пространственной модели галереи реализована «прогулка» пользователя по галерее. В ходе данной «прогулки» пользователь имеет возможность обозревать любую картину галереи с любой возможной точки наблюдения .
Основные свойства OpenGL.
OpenGL является одним из самых популярных прикладных программных интерфейсов (API – Application Programming Interface) для разработки приложений в области двумерной и трехмерной графики. Стандарт OpenGL (Open Graphics Library – открытая графическая библиотека) был разработан и утвержден в 1992 году ведущими фирмами в области разработки программного обеспечения как эффективный аппаратно-независимый интерфейс, пригодный для реализации на различных платформах. Основой стандарта стала библиотека IRIS GL, разработанная фирмой Silicon Graphics Inc. Библиотека насчитывает около 120 различных команд, которые программист использует для задания объектов и операций, необходимых для написания интерактивных графических приложений. На сегодняшний день графическая система OpenGL поддерживается большинством производителей аппаратных и программных платформ. Эта система доступна тем, кто работает в среде Windows, пользователям компьютеров Apple. Свободно распространяемые коды системы Mesa (пакет API на базе OpenGL) можно компилировать в большинстве операционных систем, в том числе в Linux. Характерными особенностями OpenGL, которые обеспечили распространение и развитие этого графического стандарта, являются: Стабильность. Дополнения и изменения в стандарте реализуются таким образом, чтобы сохранить совместимость с разработанным ранее программным обеспечением. Надежность и переносимость. Приложения, использующие OpenGL, гарантируют одинаковый визуальный результат вне зависимости от типа используемой операционной системы и организации отображения информации. Кроме того, эти приложения могут выполняться как на персональных компьютерах, так и на рабочих станциях и суперкомпьютерах. Легкость применения. Стандарт OpenGL имеет продуманную структуру и интуитивно понятный интерфейс, что позволяет с меньшими затратами создавать эффективные приложения, 9 содержащие меньше строк кода, чем с использованием других графических библиотек. Необходимые функции для обеспечения совместимости с различным оборудованием реализованы на уровне библиотеки и значительно упрощают разработку приложений. Наличие хорошего базового пакета для работы с трехмерными приложениями упрощает понимание студентами ключевых тем курса компьютерной графики – моделирование трехмерных объектов, закрашивание, текстурирование, анимацию и т.д. Широкие функциональные возможности OpenGL служат хорошим фундаментом для изложения теоретических и практических аспектов предмета.
Описывать возможности OpenGL мы будем через функции его библиотеки. Все функции можно разделить на пять категорий: Функции описания примитивов определяют объекты нижнего уровня иерархии (примитивы), которые способна отображать графическая подсистема. В OpenGL в качестве примитивов выступают точки, линии, многоугольники и т.д. Функции описания источников света служат для описания положения и параметров источников света, расположенных в трехмерной сцене. Функции задания атрибутов. С помощью задания атрибутов программист определяет, как будут выглядеть на экране отображаемые объекты. Другими словами, если с помощью примитивов определяется, что появится на экране, то атрибуты определяют способ вывода на экран. В качестве атрибутов OpenGL позволяет задавать цвет, характеристики материала, текстуры, параметры освещения. Функции визуализации позволяет задать положение наблюдателя в виртуальном пространстве, параметры объектива камеры. Зная эти параметры, система сможет не только правильно построить изображение, но и отсечь объекты, оказавшиеся вне поля зрения. Набор функций геометрических преобразований позволяют программисту выполнять различные преобразования объектов – поворот, перенос, масштабирование. При этом OpenGL может выполнять дополнительные операции, такие как использование сплайнов для построения линий и 11 поверхностей, удаление невидимых фрагментов изображений, работа с изображениями на уровне пикселей и т.д.
1.2. Интерфейс OpenGL
OpenGL состоит
из набора библиотек. Все
Функции OpenGL реализованы в модели клиент-сервер. Приложение выступает в роли клиента – оно вырабатывает команды, а сервер OpenGL интерпретирует и выполняет их. Сам сервер может находиться как на том же компьютере, на котором находится клиент (например, в виде динамически загружаемой библиотеки – DLL), так и на другом (при этом может быть использован специальный протокол передачи данных между машинами). GL обрабатывает и рисует в буфере кадра графические примитивы с учетом некоторого числа выбранных режимов. Каждый примитив – это точка, отрезок, многоугольник и т.д. Каждый режим может быть изменен независимо от других. Определение примитивов, выбор режимов и другие операции описываются с помощью команд в форме вызовов функций прикладной библиотеки. Примитивы определяются набором из одной или более вершин (vertex). Вершина определяет точку, конец отрезка или угол многоугольника. С каждой вершиной ассоциируются некоторые данные (координаты, цвет, нормаль, текстурные координаты и т.д.), называемые атрибутами. В подавляющем большинстве случаев каждая вершина обрабатывается независимо от других. С точки зрения архитектуры графическая система OpenGL является конвейером, состоящим из нескольких последовательных этапов обработки графических данных. Команды OpenGL всегда обрабатываются в том порядке, в котором они поступают, хотя могут происходить задержки перед тем, как проявится эффект от их выполнения. В большинстве случаев OpenGL предоставляет непосредственный интерфейс, т.е. определение объекта вызывает его визуализацию в буфере кадра. С точки зрения разработчиков, OpenGL – это набор команд, которые управляют использованием графической аппаратуры. Если аппаратура состоит только из адресуемого буфера кадра, тогда OpenGL должен быть реализован полностью с использованием ресурсов центрального процессора. Обычно графическая аппаратура предоставляет различные уровни ускорения: от аппаратной реализации вывода линий и многоугольников до изощренных графических процессоров с поддержкой различных операций над геометрическими данными. OpenGL является прослойкой между аппаратурой и пользовательским уровнем, что позволяет предоставлять единый интерфейс на разных платформах, используя возможности аппаратной поддержки. Кроме того, OpenGL можно рассматривать как конечный автомат, состояние которого определяется множеством значений специальных переменных и значениями текущей нормали, цвета, координат текстуры и других атрибутов и признаков. Вся эта информация будет использована при поступлении в графическую систему координат вершины для построения фигуры, в которую она входит. Смена состояний происходит с помощью команд, которые оформляются как вызовы функций.
Описание проекта «Виртуальная картинная галерея».
Данный проект предназначен для проектирования и создания виртуальных картинных галерей. Сам проект состоит из двух взаимодополняющих программ: Проектировщик и Раннер. Проектировщик – программа для разработки чертежа галереи на плоскости. Программа позволяет начертить галерею, а так же отметить те участки, где в дальнейшем должны быть «повешены» картины. Раннер – программа для создания уже самой 3D галереи с расставленными картинами в тех местах, которые мы указали в проектировщике. В раннере организован плавный проход по всей картинной галерее.
Проектировщик.
Структура программы.
Данная программа производит двумерный чертеж галереи (другими словами вид сверху) с помощью заранее заданных необходимых данных, этими данными являются количество углов, которые будут в галерее и сами координаты этих углов. Эти данные записываются в специальный файл пользователем. Перед вводом координат углов галереи пользователь должен позаботиться, чтоб углы были прямыми (что не составит особого труда для любого пользователя, знающего геометрию на школьном уровне). Программа считывает данные из файла и на их основе производит изображение, одновременно разбивая все стенки галереи на примитивы чередующихся цветов, для четкого представления мест наложения картин. После того как пользователь указал места наложения картин, программа записывает данные об этих выборах в файл. Откуда в дальнейшем раннер считает эти данные.
Интерфейс пользователя (User Guide).
Работа с проектировщиком осуществлена на очень доступном уровне для любого пользователя. Для работы с проектировщиком пользователь должен запустить нужный файл с расширением “.exe”, откроется белое окно с синей кнопкой с надписью “YES” в нижнем правом углу. С помощью левой кнопки мыши пользователь может отмечать углы галереи, а линии между углами программа сама изобразит. Программа изначально написана так чтобы все стены галереи были под строго прямыми углами, поэтому как бы криво пользователь не отмечал углы программа незначительными изменениями восстановит прямой угол между ними. После того как начерчен вид сверху галереи, то есть получили замкнутый многоугольник с прямыми углами, пользователь должен нажать на синюю кнопку в нижнем правом углу окна и можно закрыть окно.
Запустив второй файл проектировщика, пользователь увидит свой же чертеж начерченный, но уже состоящий из черных и зеленых полосок. Это выделены места возможного расположения картин, достаточно нажать мышкой на какую-нибудь из этих областей и он станет красного цвета, что значит, что на этом месте в будущем будет картина. Приложение можно закрыть.
Описание кода программы.
Рассмотрим основные главные части кода проектировщика.
Static void _stdcall mouse (AUX_EVENTREC *pEvent) - функция мыши, возвращает координаты точки на которую произведен клик.
GluUnProject (…) – функция отображает полученные оконные координаты мыши в мировые, так всю сцену мы видим тока как проекцию на экране.
Получив координаты точки клика мы записываем их в массив koord_uglov[], но перед этим проверяем и корректируем их, чтоб полученные углы были прямыми.
if(mod_f(koord_uglov[tmp1-1].
{
koord_uglov [tmp1].x = koord_uglov [tmp1-1].x;
}
If (mod_f(koord_uglov [tmp1-1].x-koord_uglov[tmp1].
{
koord_uglov [tmp1].y = koord_uglov [tmp1-1].y;
}
if(mod_f(koord_uglov[tmp1-1].
{
MessageBox (0," ","Select one more time please", MB_OK);
}
Void CALLBACK display (void) – функция прорисовки экрана.
В теле этой функции и происходит обработка массива углов и отображение стен галереи.
For (i=0; i<tmp1-1; i++)
{
glColor3d (1, 0, 0);
GlBegin (GL_LINE_LOOP);
glVertex2d (koord_uglov[i].x, koord_uglov[i].y);
glVertex2d (koord_uglov [i+1].x, koord_uglov [i+1].y);
glEnd();
}
Рассмотрим вторую программу проектировщика. Ее целью является получение чертежа галереи и разделение его на примитивы (черные и зеленые линии на экране) с дальнейшим присваиванием им номеров.
Программа начинается с того что он считывает с файла координаты всех углов галереи.
For (int i=0; i<tmp; i++)
{
file>>a[i];
}
Потом происходит прорисовка стен, но уже с разделением их на примитивы которые чередуются черным и зеленым цветом.
For (i=0; i<tmp; i+=2)
{
If (a[i] ==a [(i+2) %tmp])
draw_y (a[i], a [(i+1) %tmp], a [(i+3) %tmp]);
Else
draw_x (a [(i+1) %tmp], a[i], a [(i+2) %tmp]);
}
Во время прорисовки в цикле выше происходит проверка на обнаружение, по какой из координат происходит смещение в процессе движения от одного угла к другому.
Важной частью программы является блок, отвечающий за выделение примитивов стен, где будут находиться картины и блок изображающий выделенные части стен.
…
for(i=1;i<size_of_num_array;i+
{
if( mod(mas[i]-wx)<=0.9 && mod(mas[i+2]-wx)<=0.9 && mod(mas[i+1]-wy)<=0.9 && mod(mas[i+3]-wy)<=0.9 )
{
cout<<mas[i-1]<<' '<<endl;
….
for(i=0;i<ind;i++)
{//cout<<"selected[i]:"<<
Информация о работе Создание и проектирование картинной галереи