Автор работы: Пользователь скрыл имя, 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
for(j=0;j<size_of_num_array;j+
{
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);
glTexCoord2f(0.0,1.0);
glTexCoord2f(1.0,1.0);
glTexCoord2f(1.0,0.0);
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);
glTexCoord2f(0.0,1.0);
glTexCoord2f(1.0,1.0);
glTexCoord2f(1.0,0.0);
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);
glTexCoord2f(0.0,1.0);
glTexCoord2f(1.0,1.0);
glTexCoord2f(1.0,0.0);
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]<<
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/
…
glBindTexture(GL_TEXTURE_2D, texture[1]);
glTexParameteri(GL_TEXTURE_2D,
glTexParameteri(GL_TEXTURE_2D,
gluBuild2DMipmaps(GL_TEXTURE_
Переход в полноэкранный режим и обратно осуществляется с помощью следующих строк кода.
if (keys[VK_F1])
{
keys[VK_F1]=FALSE;
{
return 0;
}
}
Заключение.
Поставленная передо мной вначале задача выполнена в полном объёме.
Приложение
позволяет с нуля спроектировать
галерею и выбрать места
Список литературы.
Информация о работе Создание и проектирование картинной галереи