Создание и проектирование картинной галереи

Автор работы: Пользователь скрыл имя, 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

Прикрепленные файлы: 1 файл

Курсовая галлерея.doc

— 89.50 Кб (Скачать документ)

for(j=0;j<size_of_num_array;j+=5)

{

if(selected[i] == mas[j])

{

cout<<"mas[j]: "<<mas[j]<<endl;

glColor3d(1,0,0);

glBegin(GL_LINES);

glVertex2d(mas[j+1],mas[j+2]);

glVertex2d(mas[j+3],mas[j+4]);

Раннер.

Структура программы.

 

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

 

 

Интерфейс пользователя (User Guide).

 

Управление  программой осуществляется с помощью клавиш «Вперед», «Назад», «Влево», «Вправо». Предусмотрен выбор размера изображения экрана, клавишей F1 можно переключать из полноэкранного режима в обычный режим.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Описание  кода программы.

 

Вначале программа  считывает все координаты углов  галереи и создает пространственную картину. Ниже приведен блок кода, отвечающий за рисование стен вдоль оси ОХ.

 

void draw_x(int z,int x0,int x1)

{

if((x1-x0)<0)

{

for(int i=0;i<int(x0-x1);i++)

{

if(test_of_index(index)!=0)

{

glColor3d(1,1,1);

glBindTexture(GL_TEXTURE_2D, texture[(index_of_text++)%9]);

}

else{

glColor3d(1,1,1);

glBindTexture(GL_TEXTURE_2D, texture[0]);

}

glLoadName(index);

glBegin(GL_QUADS);

glTexCoord2f(0.0,0.0); glVertex3d(x0-i,0.0,z);

glTexCoord2f(0.0,1.0); glVertex3d(x0-i,1.0,z);

glTexCoord2f(1.0,1.0); glVertex3d(x0-1-i,1.0,z);

glTexCoord2f(1.0,0.0); glVertex3d(x0-1-i,0.0,z);

glEnd();

index++;

}

}

else

{

for(int i=0;i<int(x1-x0);i++)

{

if(test_of_index(index)!=0)

{

glColor3d(1,1,1);

glBindTexture(GL_TEXTURE_2D, texture[(index_of_text++)%9]);

}

else

{

glColor3d(1,1,1);

glBindTexture(GL_TEXTURE_2D, texture[0]);

}

glLoadName(index);

glBegin(GL_QUADS);

glTexCoord2f(0.0,0.0); glVertex3d(x0+i,0.0,z);

glTexCoord2f(0.0,1.0); glVertex3d(x0+i,1.0,z);

glTexCoord2f(1.0,1.0); glVertex3d(x0+1+i,1.0,z);

glTexCoord2f(1.0,0.0); glVertex3d(x0+1+i,0.0,z);

glEnd();

index++;

}

}

}

 

Аналогично же и рисуются стены вдоль оси OZ.

 

Рассмотрим  пример кода рисующий пол и совсем аналогично ему будет код для  прорисовки потолка, с той лишь разницей, что в координатах параметр, отвечающий за ось OZ не будет уже равен нули, как в случае пола.

 

 

for(i=min_x;i<max_x;i++)

{

for( j=min_y;j<max_y;j++)

glColor3d(1,1,1);

glBindTexture(GL_TEXTURE_2D, texture[9]);

glBegin(GL_QUADS);

glTexCoord2f(0.0,0.0); glVertex3d((double)(0.0+i),0.0,(double)(0.0-j));

glTexCoord2f(0.0,1.0); glVertex3d((double)(1.0+i),0.0,(double)(0.0-j));

glTexCoord2f(1.0,1.0); glVertex3d((double)(1.0+i),0.0,(double)(-1.0-j));

glTexCoord2f(1.0,0.0); glVertex3d((double)(0.0+i),0.0,(double)(-1.0-j));

glEnd();

}

}

Передвижение  по галерее осуществляется с помощью  следующих строк кода

if (keys[VK_UP])

{

xpos_copy -=1.25*( (double)sin(heading*piover180) * 0.05);

zpos_copy -=1.25*( (double)cos(heading*piover180) * 0.05);

Значения Sin и Cos в аргументах и придают движению волнистый характер, как и у живого человека.

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

 

 

int pnpoly(double x, double y)

{

int i,j;

double* xp = new double [tmp/2];

Double* yp = new double[tmp/2];

for (i=0;i<tmp/2;i++){

xp[i]=arr[2*i];//cout<<xp[i]<<" "<<array[i]<<endl<<flush;  

yp[i]=arr[2*i+1];

}

 

   int c = 0;

   for (i = 0, j = tmp/2 - 1; i < tmp/2; j = i++)

   {

     if ((((yp[i]<=y) && (y<yp[j])) || ((yp[j]<=y) && (y<yp[i]))) &&

       (x > (xp[j] - xp[i]) * (y - yp[i]) / (yp[j] - yp[i]) + xp[i]))

         c = !c;

   }

  // cout<<"c: "<<c<<endl;

   return c;

}

 

Картины загружаются  из папки “Data” находящаяся в той же директории где и сама программа.

TextureImage[1]=LoadBMP("Data/1.bmp");

glBindTexture(GL_TEXTURE_2D, texture[1]);

glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);

glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST);

gluBuild2DMipmaps(GL_TEXTURE_2D, 3, TextureImage[1]->sizeX, TextureImage[1]->sizeY, GL_RGB, GL_UNSIGNED_BY

 

Переход в полноэкранный  режим и обратно осуществляется с помощью следующих строк  кода.

 

if (keys[VK_F1])      

{

keys[VK_F1]=FALSE;          KillGLWindow();           fullscreen=!fullscreen;          if (!CreateGLWindow("Bagrat",640,480,16,fullscreen))

{

return 0;      

}

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Заключение.

 

Поставленная  передо мной  вначале задача выполнена  в полном объёме.

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Список  литературы.

 

  1. Баяковский Ю.М. «Графическая библиотека OpenGL»(2003).
  2. Френсис Хилл. OpenGL. «Программирование компьютерной графики».
  3. Ричард С. OpenGL  «Супер книга».
  4. Samuel R.    3D.Computer.Graphics.-.A.Mathematical.Introduction.with.OpenGL.



Информация о работе Создание и проектирование картинной галереи