405

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

Курсовая

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

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

Русский

2013-01-06

79 KB

16 чел.

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

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

Кафедра ЭВМ

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

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

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

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

    Ярош Е.С.      

  «     »                   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.


 

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

32551. Контакторыи. Коммутация силовых цепей электродвигателей 281.61 KB
  По роду коммутируемого тока контакторы делят на контакторы постоянного и переменного тока. Как правило род тока в цепи управления которая питает электромагнитный привод совпадает с родом тока главной коммутируемой цепи. Однако известны случаи когда катушки контакторов переменного тока получают питание от цепи постоянного тока. Конструктивная схема контактора постоянного тока показана на рис.
32552. Электромагнитные муфты 341.13 KB
  24 показана схема муфты серии ЭТМ с магнитопроводящими фрикционными дисками. Другой зажим катушки подключают к источнику питания постоянного тока через корпус муфты. Электромагнитная контактная дисковая муфта При включении муфты магнитный поток Ф созданный током протекающим по виткам катушки проходит через корпус пакет внутренних 6 и наружных 4 дисков и замыкается через якорь 5.
32553. Устройства обработки информации 19.92 KB
  Рычажный контактный узел с шарнирным закреплением работающий с эффектом притирания и перекатывания контактов что способствует их лучшему самоочищению и уменьшению переходного сопротивления поэтому они часто используются в мощных коммутационных устройствах например контакторах. Жидкометаллические контакты основными достоинствами которых являются малое переходное сопротивление отсутствие необходимости в контактном нажатии отсутствие эффектов пригорания и залипания контактов возможность работы при высоком давлении температуре...
32554. Реле времени (таймеры) 13.93 KB
  По способу задержки виду замедлителя: электромагнитное замедление до 10 сек; механическое замедление: пневматические и моторные от 3 до 30 мин; электронное замедление: конденсаторные и счётноимпульсные десятки сек; программнореализуемые любые задержки времени. При работе систем защиты и автоматики часто требуется создать выдержки времени между срабатыванием двух или нескольких аппаратов а также при возникновении необходимости производить операции в определённой временной последовательности автоматическое...
32555. Электромагнитные реле времени 190.42 KB
  Реле времени с электромагнитным замедлением При отключении обмотки реле 1 рис. В результате магнитный поток в сердечнике реле убывает медленно якорь 5 остается в притянутом положении и контакты реле 4 размыкаются с выдержкой времени в несколько секунд. Такие реле времени не отличаются стабильностью но находят широкое применение благодаря простоте и дешевизне.
32556. Реле времени КТ 88.94 KB
  28 приведен пример использования реле времени КТ в схеме управления циклом движения суппорта которая обеспечивает его рабочий ход р. задержку времени на концевике SQ2 и холостой ход х. Рабочий ход суппорта обеспечивается контактором КМ1 холостой ход контактором КМ2 а выдержка времени выстоя реле временем КТ.
32557. Современные технические устройства переработки информации 15.07 KB
  Примерами таких типовых устройств могут служить: Триггеры элементарные ячейки памяти предназначенные для хранения одного бита информации логического 0 или 1; Счетчики устройства для выполнения функций счета и задержек времени; Преобразователи кодов устройство для автоматического изменения по заданному алгоритму соответствия между входными и выходными кодами без изменения их смыслового содержания другими словами это схемы для перевода одного многоразрядного кода в другой; Регистры устройства для приёма хранения и...
32558. Промышленные программируемые логические контроллеры (ПЛК) 15.9 KB
  Они впервые появились в конце шестидесятых годов в автомобильной промышленности США в результате слияния трех направлений техники: Релейноконтактная и бесконтактная электроавтоматика основа ПЛК; Цикловое программное управление принцип управления ПЛК; Микропроцессорная техника элементная база ПЛК. Первоначально производством ПЛК занимались компьютерные фирмы DEC Modicon Entrekin Computers но позже к их разработке подключились и электротехнические фирмы Generl Elektric llen Brdley ISSC которые выпускали...
32559. Контроллеры на базе персональных компьютеров (ПК) 23.67 KB
  Контроллеры на базе персональных компьютеров ПК Это направление существенно развилось в последнее время что объясняется в первую очередь следующими причинами: повышением надежности ПК особенно в промышленном исполнении; использовании открытой архитектуры например IBMсовместимых ПК; легкости подключения любых блоков ввода вывода модулей УСО; возможностью использования широкой номенклатуры наработанного программного обеспечения операционных систем реального времени баз данных пакетов прикладных программ контроля и...