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.


 

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

41931. Принцип дії та будова мікропроцесора 365.03 KB
  strtup Запуск програми mov BX vr1 команда копіювання vr1 в BX mov DL vr2 команда копіювання vr2 DL mov DH 0 команда копіювання 0 в DH mov X 0 команда копіювання 0 в X dd X BX команда додавання DX до X dd X DX команда додавання DX до X mov result X команда копіювання АХ в result . mov BX vr1 команда копіювання vr1 в BX mov DL vr2 команда копіювання vr2 DL mov DH 0 команда копіювання 0 в DH mov X 0 команда...
41932. Нахождение корней уравнения в MathCad на интервале [-2.5;2.5] 146.34 KB
  Тема: Нахождение корней уравнения в MthCd: на интервале Цель работы: нахождение корней уравнения в программе MthCd с использованием встроенных функций root polyroots символьного решения. Задание: 1 Нахождение корней уравнения в программе MthCd с использованием встроенной функции root.
41933. Выполнение действий с матрицами в программе MathCad 69.08 KB
  Задание: 1 Создать матрицы. 3 Найти ранг матрицы А ранг матрицы наибольший порядок минора этой матрицы который отличный от нуля: rnk. 4 В символьном виде выполнить транспонирование матрицы В т. заменить местами строки и столбцы матрицы В.
41934. Нахождение решений системы линейных уравнений в MathCad 60.43 KB
  Тема: Нахождение решений системы линейных уравнений в MthCd. Цель работы: нахождение решений системы линейных уравнений в программе MthCd. Коэффициенты при неизвестных Свободные члены...
41935. Нахождение решений системы нелинейных уравнений в MathCad 45.24 KB
  Тема: Нахождение решений системы нелинейных уравнений в MthCd. Цель работы: нахождение решений системы нелинейных уравнений в программе MthCd . Задание: 1 Найти решение системы нелинейных уравнений с использованием так называемого блока решений .
41936. Символьные действия математического анализа в MathCad 73.2 KB
  Цель работы: определение неопределенных и определенных интегралов и производных в программе MthCd с использованием символьных операций. Неопределенный интеграл: Определенный интеграл: Производная: Задание: Применяя последовательно к каждой функции команды меню Symbolic Simplify найти: Найти: Неопределенный интеграл. Определенный интеграл 3 Производную первого порядка. Решение: Выводы В ходе выполнения лабораторной работы с помощью Mthcd научились применяя команды меню Symbolic Simplify находить неопределенный интеграл...
41937. Вычисление производных в задачах геометрии и частных производных 47.73 KB
  Тема: вычисление производных в задачах геометрии и частных производных. Цель работы: вычисление производных в задачах геометрии и нахождение частных производных высоких порядков в программе MthCd . 2 Выполнить числовое и символьное вычисление частных производных высшего порядка от функции трех переменных: fx=zsinxyz2 в точке M111.
41938. Вычисление интегралов в задачах геометрии и механики 99.01 KB
  Тема: вычисление интегралов в задачах геометрии и механики. Цель работы: вычисление интегралов в задачах геометрии и механики в программе MthCd. Ход выполнения работы: Выводы В ходе выполнения лабораторной работы с помощью Mthcd научились вычислять интегралы в задачах геометрии и механики а именно: решать систему уравнений; находить площадь через двойной интеграл статические моменты координаты центра тяжести.
41939. Решение обычных дифференциальных уравнений в MathCad 87.45 KB
  Тема: решение обычных дифференциальных уравнений в MthCd. Цель работы: с использованием встроенных функций и блочной структуры найти решение обычных дифференциальных уравнений. Задание: 1 Найти решение обычного дифференциального уравнения y =fxy с использованием блока решений.