405

Создание программы с цветным движущимся изображением

Курсовая

Информатика, кибернетика и программирование

По заданию требуется разработать программу, реализующую цветное движение: вращение многоугольника (количество углов от 3 до 5 задается пользователем). Алгоритмы работы программ различные, что обусловлено высоким уровнем библиотеки OpenGL и относительно низким уровнем средств DirectX.

Русский

2013-01-06

79 KB

17 чел.

Федеральное агентство по образованию РФ

Южно-Уральский государственный университет

Кафедра ЭВМ

ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

к курсовой работе по дисциплине

“Компьютерная графика”

 Руководитель:

    Ярош Е.С.      

  «     »                   2005г.

                                                                             Автор работы:

                                                                                             студент группы ПС-423

                                                                            Бухарин Д.А.                                                   

                                                                                              «    »                       2005г.

                                                                                    Работа защищена

                                                                                         с оценкой

                                                                                        ______________

                                                                                             «    »                      2005г.

Челябинск

2011г.

Задание

ЮУрГУ

Факультет ПС

Кафедра ЭВМ

Задание к курсовой работе

по курсу  “Компьютерная графика”

                           студенту группы ПС-423 Бухарину Д.А.

1. Тема проекта: разработать программу, реализующую цветное движущееся изображение: вращение многоугольника с заданным числом углов.

 

2. Технические требования : Программа должна быть реализована в 2 вариантах:

в среде MS WINDOWS (без использования RAD-средств):

- с подключением средств DirectX;

- с подключением средств OpenGL.

В среде MS WINDOWS приложение должно:

- допускать остановку движения по нажатию любой клавиши или левой кнопки мыши;

- иметь собственную пиктограмму;

- настраиваться на желаемую временную задержку.

3. Содержание пояснительной записки:

   Пояснительная записка должна отражать все этапы работы.

4. Дата выдачи задания:  « 10 »   октября    2005 г.

 

         Руководитель  ____________(Ярош Е.С.)

Студент            ____________(Бухарин Д.А.)


Содержание

1. Анализ задания и выбор алгоритма решения 4

2. Особенности OpenGL реализации программы 5

3. Особенности DirectX реализации программы 5

4. Фрагменты текста программ 6

4.1. OpenGL 6

4.2. DirectX 8

Литература 10


1. Анализ задания и выбор алгоритма решения

   По заданию требуется разработать программу, реализующую цветное движение: вращение многоугольника (количество углов от 3 до 5 задается пользователем).

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

   В качестве языка программирования выберем C++. Среда программирования Borland C++5.02.

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

   Для смены кадров будет использоваться системный таймер (сообщение API: WM_TIMER).

   По сообщению WM_DESTROY уничтожаются все созданные переменные как для DirectX, так и для OpenGL.
2. Особенности OpenGL реализации программы

 Особенности реализации можно выделить следующие:

  1.  Подключение заголовочного файла GL/glaux.h, в котором описаны функции;
  2.  Инициализация OpenGL;
  3.  Использование ламп;
  4.  Использование наложения цветов;
  5.  Использование прозрачности объектов;
  6.  Работа с координатами (сохранение, восстановление преобразование координат).

Описание алгоритма:

- рисуем многоугольник так, чтобы его центр находился в начале координат;

- анимация реализуется путем поворота осей координат относительно вектора {0,0,1}.

3. Особенности DirectX реализации программы

    Особенностей реализации DirectX было значительно больше, выделю лишь основные:

1) Инициализация  DirectDraw. (Проверка установки на компьютере пользователя используемых в программе интерфейсах DirectDraw, заполнение основных структур);

2) Поскольку стандартных функций для вывода графических примитивов в DirectDraw нет, программа реализована в качестве анимации;

3) Создание вторичной и первичной поверхностей (используем двойную буферизацию);

4) Создание битового образа, и копирование его во вторичную поверхность;

5) Переключение поверхностей – блитинг;

6)Работа с объектами интерфейса DirectDraw: создание, удаление, использование методов.

   Вообще изобразить графические примитивы в DirectDraw можно, например, при помощи GDI. Но это будет медленно, потому что методы DirectDraw позволяют работать напрямую с адаптером. Также алгоритм реализации задания при помощи примитивов был сделан под OpenGL. По всем этим причинам было решено реализовать анимацию под DirectX при помощи блитинга.


4. Фрагменты текста программ

  

Здесь приведем наиболее значительный по части компьютерной графики код.

 4.1. OpenGL

//--Поехали---------------------------------------------------------------------

void polyOGL::Do(HWND hWnd)

{double A=2*0.5*0.5-2*0.5*0.5*cos(3.14*72/180);

static double vect=0;

static int fi=0;

if(Begin)

 {fi=0;

  Begin=0;

 }

glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );

glPushMatrix();

glRotated(fi,0,0,1);

glColor3f(0,1,0);

if(coner==3)

{

 glBegin(GL_POLYGON);

  glVertex3d(0,0.5,0);

  glVertex3d(-sqrt(0.25-pow(0.25,2)),-0.25,0);

  glVertex3d(sqrt(0.25-pow(0.25,2)),-0.25,0);

 glEnd();

}

if(coner==4)

{

 glBegin(GL_POLYGON);

  glVertex3d(0,0.5,0);

  glVertex3d(-0.5,0,0);

  glVertex3d(0,-0.5,0);

  glVertex3d(0.5,0,0);

 glEnd();

}

if(coner==5)

 {

 double x1,x2,y1,y2;

 y1=A-0.25;

 x1=-sqrt(0.25-pow(y1,2));

 x2=-sqrt(A)/2;

 y2=-sqrt(0.25-pow(x2,2));

 glBegin(GL_POLYGON);

  glVertex3d(0,0.5,0);

  glVertex3d(x1,y1,0);

  glVertex3d(x2,y2,0);

  glVertex3d(-x2,y2,0);

  glVertex3d(-x1,y1,0);

 glEnd();

}

glPopMatrix();

fi+=15;

if(fi==360) fi=0;

SwapBuffers(wglGetCurrentDC());

 return;

}

4.2. DirectX

//--Поехали---------------------------------------------------------------------

void polyDX::Do(HWND hWnd)

{

static int frame=0;

char dir[]={'\0','\0'};

itoa(coner,dir,10);

if(Begin)

 {frame=0;Begin=0;}

char file[10]={""},str[]={".bmp"},str1[3]={'\0','\0','\0'};

itoa(frame+1,str1,10);

strcat(file,dir);

strcat(file,"\\");

strcat(file,str1);

strcat(file,str);

hBmp=(HBITMAP)LoadImage(NULL, file, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);

GetObject (hBmp, sizeof(BITMAP), &Bmp);

ddsd.dwSize = sizeof ( ddsd );

ddsd.dwFlags  = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT;

ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY;

ddsd.dwWidth=Bmp.bmWidth;

ddsd.dwHeight=Bmp.bmHeight;

lpDD->CreateSurface(&ddsd, &lpDDSec, NULL);

HDC HDCImage   = NULL;

HDC HDCSurface = NULL;

HDC ThisDevice = NULL;

HDCImage=CreateCompatibleDC(NULL);

SelectObject(HDCImage, hBmp);

lpDDSec->GetDC(&HDCSurface);

ddsd.dwSize=sizeof(ddsd);

ddsd.dwFlags=DDSD_HEIGHT|DDSD_WIDTH;

lpDDSec->GetSurfaceDesc(&ddsd);

BitBlt(HDCSurface, 0,0,ddsd.dwWidth,ddsd.dwHeight, HDCImage, 0, 0, SRCCOPY);

lpDDSec->ReleaseDC(HDCSurface);

DeleteDC(HDCImage);

//GetClientRect(hWnd,&ClientRect);

BMPRect.top=0;

BMPRect.bottom=Bmp.bmHeight;

BMPRect.left=0;

BMPRect.right=Bmp.bmWidth;

RECT rr;

rr.left=ClientRect.left;rr.top=ClientRect.top;

rr.bottom=BMPRect.bottom+ClientRect.top;rr.right=BMPRect.right+ClientRect.left;

lpDDPrim->Blt(&rr,lpDDSec,&BMPRect,DDBLT_WAIT,NULL);

frame++;

lpDDSec->Release();

lpDDSec=NULL;

 if(frame==10)frame=0;

return;

}


Литература

1. Рихтер Дж. Windows для профессионалов, – М.: Изд-во “Русская Редакция”, 2001.

2. Порев В. Компьютерная графика. Учебное пособие. – СПб.: «БХВ-Петербург», 2002.


 

А также другие работы, которые могут Вас заинтересовать

42420. Булева алгебра. Законы логики высказываний. Эквивалентные преобразования 83 KB
  Законы логики высказываний. Теоретическая часть Всё множество формул логики высказываний с точки зрения их значения истинности разбивается на три класса: 1 тождественно истинные тавтология; 2 тождественно ложные противоречие; 3 нейтральные. Особое место в логике высказываний занимают законы логики тождественно истинные формулы тавтологии. Законы логики высказываний Закон тождества: А эквивалентно А.
42421. Равносильность формул. Закон двойственности. Логические функции 120.5 KB
  Каждая формула представляет собой функцию входящих в нее букв А В Определение1: Формулы F1 и F2 называются равносильными если при любых значениях входящих в них переменных x1x2xn эти формулы принимают одинаковые значения. Между понятиями равносильности и эквивалентности существует связь: если формулы F1 и F2 равносильны то формула F1F2 эквивалентность принимает одни и те же значения при всех значениях переменных и обратно: если формула F1F2 принимает одни и те же значения при всех значениях переменных то формулы F1 и F2...
42422. Нормальные формы формул. Проблема разрешения 89 KB
  Теорема 1 о приведении к ДНФ: Для любой формулы А можно найти такую формулу В находящуюся в ДНФ что АВ. Формула В называется ДНФ формулы А. Конечно например все ДНФ данной формулы равносильны. Выделим среди ДНФ так называемую совершенную дизъюнктивную нормальную форму формулы.
42423. Полные системы булевых функций. Многочлен Жегалкина. Теорема Поста 60 KB
  Цель работы: овладение навыками представления булевых функций в виде полинома Жегалкина. Теоретическая часть Таблицы истинности булевых функций сростом числа аргументов становятся громоздкими и неудобными. Более удобный аналитический способ задания булевых функций основан на рассмотрении двузначной алгебры Поста с операцией суперпозиции над множеством булевых функций.
42424. Минимизация булевых функций методом Квайна 686 KB
  Теоретическая часть Рассмотренные выше совершенная дизъюнктивная и конъюнктивная нормальные формы СДНФ и СКНФ используются для первоначального представления заданной переключательной функции через функции основной системы. Но эти формы не удобны для построения логических схем ЭВМ так как часто содержат элементы которые можно исключить при синтезе схем исходя из других форм представления функции. Существует ряд эффективных способов нахождения минимальной ДНФ булевой функции. Применяемая в методе Квайна операция неполного склеивания...
42425. Функциональные схемы 435 KB
  Такие схемы встречаются в электронных устройствах используемых в компьютерах калькуляторах телефонных системах и ряде других устройств. Постановка задачи синтеза логических схем По аналогии с тем как из трех элементарных частиц  протонов нейтронов и электронов порождаются различные химические элементы которые соединяясь в молекулы образуют вещества всей живой и неживой природы из трех простейших логических схем  дизъюнктора конъюнктора и инвертора можно образовать сколь угодно сложные функциональные схемы соответствующие...
42426. Нечёткие множества 218 KB
  Стандартное четкое множество строится на основе математической конструкции отсеивающей из универсального множества некоторую часть его элементов. То есть фактически любое множество определяется этим самым свойством или набором свойств S и объединяет некоторое количество не обязательно конечное счетное элементов обладающих свойством S. А теперь давайте попробуем из всей бесконечности всего в нашей Вселенной в которой очевидно есть место и для таких объектов как вода и стаканы сформировать множество на основе вполне понятного...
42427. Фракталы 803.5 KB
  Цель работы: ознакомиться с фрактальными структурами в физических системах и явлениях и научиться их программировать. Как подступиться к моделированию каскадных водопадов или турбулентных процессов определяющих погоду Фракталы и математический хаос подходящие средства для исследования поставленных вопросов. Термин фрактал относится к некоторой статичной геометрической конфигурации такой как мгновенный снимок водопада.
42428. Проектирование RAM 304 KB
  Из-за наличия всего одной шины и для адреса и для данных необходимо ввести дополнительный регистр для чтения в него адреса и следовательно требуется добавить команду записи адреса с шины в регистр. Тогда структурная схема имеет вид: Тогда система команд имеет следующий вид: not RS not CS not WE MO 1 X X M 0 0 0 WR 0 0 1 RD 0 1 X Запись адреса в RG ПРОЕКТИРОВАНИЕ РЕГИСТРА Регистр адреса состоит из 10 одноразрядных регистров-триггеров. Следовательно схема регистра адреса для 1го разряда будет иметь вид: Полный регистр:...