Дипломная (вкр): Реалізація 3-D графіки на OpenGL

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

         перерви використовувати для зорового та фізичного розвантажування:

а)      стоячи або сидячи робити похитування головою ліворуч-праворуч (темп швидкий);

б)      стоячи або сидячи робити нахили голови уперед-назад (темп помірний);

в)      масаж лоба, злегка його погладжуючи, а також погладжуючи ділянки над бровами у напрямку до скронь;

г)       стоячи або сидячи здійснюємо самомасаж шиї та потилиці,погладжуючи потилицю та шию у напрямку до торса;

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

.2 Вимоги безпеки перед початком роботи

.        Перед початком роботи перевірити:

         розміщення складових частин комп’ютера (монітор, принтер, та інших блоків);

         монітор слід розташовувати таким чином, щоб кут зору на екран монітора становив 10-15 градусів, а відстань до екрана 400-800 мм;

         цілісність, з'єднувальних кабелів;

         підключення складових частин комп’ютера згідно схеми з’єднання;

         наявність передбачених захисних екранів;

         наявність і стан захисних кожухів. Підготовку комп’ютера до роботи провадити у відключеному стані;

         забезпечити освітлення робочого місця таким чином, щоб не утворювались відблиски від клавіатури та екрану відеомонітора в напрямку очей працюючого;

         при неможливості забезпечення - застосовувати спеціальні захисні сітки, фільтри.

.3 Вимоги безпеки під час роботи

Підключення комп’ютера проводити послідовно, згідно з інструкцією по експлуатації. Не підключати та не відключати з’єднувачі електроживлення при включеному комп’ютері. Під час перерв у роботі виключити монітор комп’ютера. Не залишати працюючий комп’ютер без нагляду. Працювати з екранними захисними сітками та захисними екранами, які встановлюються на моніторах.

.4 Вимоги безпеки по закінченні роботи

.        Виключити комп’ютер в послідовності згідно з інструкцією по експлуатації.

.        Доповідати особі,яка відповідає за технічний стан комп’ютера, про всі зауваження і несправності в роботі комп’ютера, якщо вони риси місце.

.        Привести в порядок робоче місце, прибрати зайві предмети та сміття.

.        Покласти носії інформації до місць збереження.

.5 Вимоги безпеки в аварійних ситуаціях

.        При виникненні ситуації (поява шумів,скрипів при роботі, запаху гару та диму), яка може привести до аварії, необхідно терміново відключити комп’ютер від електромережі і повідомити про це особу, яка відповідає за технічний стан комп’ютера. Самостійна ліквідація несправності забороняється.

.        При необхідності надати першу медичну допомогу потерпілим.

ВИСНОВКИ

У заключення, з усього приведеного матеріалу можна побачити, що у теперішній час існує таке велике різноманіття програмних засобів для створення комп’ютерної графіки, що кожен, хто вирішить займатись цією цікавою справою, завжди знайде усі необхідні інструменті для своєї праці. Також слід звернути увагу на те, що більшість сучасних пакетів, особливо це стосується пакетів та редакторів для поліграфічних процесів, дозволяють виконувати операції з різними типами графіки водночас, користуючись тільки одним пакетом.

В результаті виконання дипломного проекту були розглянуті особливості реалізації тривимірного моделювання в системі Borland C++ з використанням бібліотеки OpenGL, на прикладі розробки пересування зображень у 3D.

Освоєння основ тривимірного моделювання дозволить стати фахівцем високого класу, що володіє всіма необхідними в сучасних умовах професійними навиками. Оволодіння такою бібліотекою, як OpenGL дозволить фахівцю мати всі необхідні в сучасних умовах професійні навики.

Комп’ютерна графіка - це на сьогодні величезний світ різноманітних редакторів та пакетів, у якому кожен може знайти майже любі інструменти для втілення у життя найсміливіших своїх задумів.

В даному дипломному проекті:

Описані та розглянуті можливості бібліотеки OpenGL

Створена програма, яка демонструє роботу OpenGL

Розраховані витрати на дипломний проект

Описані правила безпеки на робочому місці

СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ

1.      Aaftab Munshi «OpenGL® ES 2.0 Programming Guide <http://www.knigka.info/2011/04/18/opengl-es-2.0-programming-guide.html>»

2.      <http://citforum.univ.kiev.ua/programming/opengl/3d_opengl/>

.        <http://open-gl.com/>

.        <http://opengl.org.ru/>

.        <http://pmg.org.ru/nehe/index.html>

.        http://pmg.org.ru/nehe/index.html

.        <http://uk.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BC%D0%BF%27%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D0%B0_%D0%B3%D1%80%D0%B0%D1%84%D1%96%D0%BA%D0%B0>

.        <http://www.codenet.ru/progr/opengl/>

.        А.В.Боресков «Графика трехмерной компьютерной игры на основе OpenGL <http://www.knigka.info/2008/09/03/grafika-trekhmernojj-kompjuternojj-igry.html>»

.        Баяковский Ю.М., Игнатенко А.В. «Начальный курс OpenGL <http://www.knigka.info/2011/01/20/nachalnyjj-kurs-opengl.html>»

.        В.М. Порев «Компютерная графика. Учебное пособие»

12.    Игорь Тарасов. «OpenGL <http://www.knigka.info/2008/03/24/opengl.html>»

13.    Паулин Бейкер Компьютерная графика и стандарт OpenGL <http://www.knigka.info/2007/07/04/kompjuternaja_grafika_i_standart_opengl.html>

14.    Ричард С. Райт-мл. и Бенджамин Липчак «OpenGL Суперкнига <http://www.knigka.info/2008/03/24/opengl-superkniga.html>»

.        Т.О. Блінова «Комп’ютерна графіка» Порєв

ДОДАТОК А. Технічне завдання

1. Вступ

В даний час деякі сторони сучасного життя неможливо уявити без застосування комп’ютерних технологій, у тому числі без комп’ютерної графіки. Дана програма демонструє заздалегідь згенеровану 3D графіку.

. Призначення

Система призначена для демонстрації можливостей бібліотеки OpenGL

. Вимоги до програми або програмного виробу

3.1 Вимоги до функціональних характеристик.

Система повинна забезпечувати можливість виконання таких функцій:

-       Демонстрація графіки;

-       Зміна положення об’єкта;

3.2 Вимоги до надійності.

1. Програмний продукт має відповідати сучасному рівню вимог до розробки програмного забезпечення (структурному і об'єктно-орієнтованому підходам).

. Передбачити контроль виведеної інформації.

3.3 Вимоги до складу і параметрів технічних засобів.

Система повинна працювати на IBM сумісних персональних комп'ютерах.

Мінімальна конфігурація:

• тип процесора  Intel Pentium R;

• обсяг ОЗП  512 Mb;

• тип монітора  VGA;

• тип маніпулятора миша, клавіатура.

3.4 Вимоги до інформаційної та програмної сумісності.

Система повинна працювати під управлінням :

· MS Windows XP SP3 и вище;

·              MS Windows Vista SP2 и вище;

·              MS Windows 7 и вище;

·              MS Windows 8 и вище.

4. Вимоги до програмної документації.

• Розробляються програмні модулі повинні бути самодокументовані, тобто тексти програм повинні містити всі необхідні коментарі.

• До складу супроводжуючої документації повинні входити:

а) розрахунково-пояснювальна записка;

б) керівництво користувача

ДОДАТОК Б. Лістинг програми

#include <windows.h>

#include <stdio.h>

#include <gl\gl.h>

#include <gl\glu.h>

#include <gl\glaux.h>

          hDC=NULL;      hRC=NULL;      hWnd=NULL;hInstance;

         keys[256];  active=TRUE;      fullscreen=TRUE;

         twinkle;      tp;

         num=50;

struct

{

         int r, g, b;

         GLfloat dist,;

};star[num];

         zoom=-15.0f;tilt=90.0f; spin;

         loop; texture[1];

         CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

_RGBImageRec *LoadBMP(char *Filename)

{*File=NULL;

(!Filename)

{NULL;

}

=fopen(Filename,"r");

(File)

{(File);auxDIBImageLoad(Filename);

}NULL;

}

LoadGLTextures()

{Status=FALSE;

_RGBImageRec *TextureImage[1];

(TextureImage,0,sizeof(void *)*1);

(TextureImage[0]=LoadBMP("Data/Star.bmp"))

{=TRUE;

(1, &texture[0]);

(GL_TEXTURE_2D, texture[0]);(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);D(GL_TEXTURE_2D, 0, 3, TextureImage[0]->sizeX, TextureImage[0]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]->data);

}(TextureImage[0])

{(TextureImage[0]->data)

{(TextureImage[0]->data);

}

(TextureImage[0]);

}

Status;

}

ReSizeGLScene(GLsizei width, GLsizei height)

{(height==0)

{=1;

}

(0,0,width,height);

(GL_PROJECTION);();

(45.0f,(GLfloat)width/(GLfloat)height,0.1f,100.0f);

(GL_MODELVIEW);();

}

InitGL(GLvoid)

{(!LoadGLTextures())

{FALSE;

}

(GL_TEXTURE_2D);(GL_SMOOTH);(0.0f, 0.0f, 0.0f, 0.5f);(1.0f);(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);(GL_SRC_ALPHA,GL_ONE);(GL_BLEND);

(loop=0; loop<num; loop++)

{[loop].angle=0.0f;[loop].dist=(float(loop)/num)*5.0f;[loop].r=rand()%256;[loop].g=rand()%256;[loop].b=rand()%256;

}TRUE;

}

DrawGLScene(GLvoid)

{(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);(GL_TEXTURE_2D, texture[0])

(loop=0; loop<num; loop++)

{();(0.0f,0.0f,zoom);(tilt,1.0f,0.0f,0.0f);(star[loop].angle,0.0f,1.0f,0.0f);(star[loop].dist,0.0f,0.0f);(-star[loop].angle,0.0f,1.0f,0.0f);(-tilt,1.0f,0.0f,0.0f);

(twinkle)

{ub(star[(num-loop)-1].r,star[(num-loop)-1].g,star[(num-loop)-1].b,255);(GL_QUADS);f(0.0f, 0.0f); glVertex3f(-1.0f,-1.0f, 0.0f);f(1.0f, 0.0f); glVertex3f( 1.0f,-1.0f, 0.0f);f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 0.0f);f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 0.0f);();

}

(spin,0.0f,0.0f,1.0f);ub(star[loop].r,star[loop].g,star[loop].b,255);(GL_QUADS);f(0.0f, 0.0f); glVertex3f(-1.0f,-1.0f, 0.0f);f(1.0f, 0.0f); glVertex3f( 1.0f,-1.0f, 0.0f);f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 0.0f);f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 0.0f);();

+=0.01f;[loop].angle+=float(loop)/num;[loop].dist-=0.01f;(star[loop].dist<0.0f)

{[loop].dist+=5.0f;[loop].r=rand()%256;[loop].g=rand()%256;[loop].b=rand()%256;

}

}TRUE;

}

KillGLWindow(GLvoid)(fullscreen)

{(NULL,0);(TRUE);

}

(hRC)

{(!wglMakeCurrent(NULL,NULL))

{(NULL,"Release Of DC And RC Failed.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);

}

(!wglDeleteContext(hRC))

{(NULL,"Release Rendering Context Failed.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);

}=NULL;

}

(hDC && !ReleaseDC(hWnd,hDC))

{(NULL,"Release Device Context Failed.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);=NULL;

}

(hWnd && !DestroyWindow(hWnd)) // Are We Able To Destroy The Window?

{(NULL,"Could Not Release hWnd.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);=NULL;

}

(!UnregisterClass("OpenGL",hInstance))

{(NULL,"Could Not Unregister Class.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);=NULL;

}

}

CreateGLWindow(char* title, int width, int height, int bits, bool fullscreenflag)

{                 PixelFormat;        wc;             dwExStyle;          dwStyle;              WindowRect;.left=(long)0;.right=(long)width;.top=(long)0;.bottom=(long)height;

=fullscreenflag;

          = GetModuleHandle(NULL);.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;.lpfnWndProc  = (WNDPROC) WndProc;.cbClsExtra    = 0;.cbWndExtra         = 0;.hInstance    = hInstance;.hIcon       = LoadIcon(NULL, IDI_WINLOGO);.hCursor         = LoadCursor(NULL, IDC_ARROW);.hbrBackground = NULL;.lpszMenuName   = NULL;.lpszClassName = "OpenGL";

(!RegisterClass(&wc))

{(NULL,"Failed To Register The Window Class.","ERROR",MB_OK|MB_ICONEXCLAMATION);FALSE;

}

(fullscreen)

{dmScreenSettings;(&dmScreenSettings,0,sizeof(dmScreenSettings));.dmSize=sizeof(dmScreenSettings);.dmPelsWidth         = width;.dmPelsHeight  = height;.dmBitsPerPel = bits;.dmFields=DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT;

To Set Selected Mode And Get Results. NOTE: CDS_FULLSCREEN Gets Rid Of Start Bar.(ChangeDisplaySettings(&dmScreenSettings,CDS_FULLSCREEN)!=DISP_CHANGE_SUCCESSFUL)

{

(MessageBox(NULL,"The Requested Fullscreen Mode Is Not Supported By\nYour Video Card. Use Windowed Mode Instead?","NeHe GL",MB_YESNO|MB_ICONEXCLAMATION)==IDYES)

{=FALSE;

}

{

(NULL,"Program Will Now Close.","ERROR",MB_OK|MB_ICONSTOP);FALSE;

}

}

}

(fullscreen)

{=WS_EX_APPWINDOW;=WS_POPUP;(FALSE);

}

{=WS_EX_APPWINDOW | WS_EX_WINDOWEDGE;=WS_OVERLAPPEDWINDOW;

}

(&WindowRect, dwStyle, FALSE, dwExStyle);

(!(hWnd=CreateWindowEx(  dwExStyle,

,|_CLIPSIBLINGS |_CLIPCHILDREN,

, 0,.right-WindowRect.left,.bottom-WindowRect.top,,,,)))

{();(NULL,"WindowCreation Error.","ERROR",MB_OK|MB_ICONEXCLAMATION);FALSE;

         PIXELFORMATDESCRIPTOR pfd=

{(PIXELFORMATDESCRIPTOR),1,_DRAW_TO_WINDOW |_SUPPORT_OPENGL |_DOUBLEBUFFER,_TYPE_RGBA,,

, 0, 0, 0, 0, 0,

,

,

,

, 0, 0, 0,

,

,

,_MAIN_PLANE,

,

, 0, 0

};

(!(hDC=GetDC(hWnd)))

{();(NULL,"Can'tCreate A GL Device

Context.","ERROR",MB_OK|MB_ICONEXCLAMATION);FALSE;

}

(!(PixelFormat=ChoosePixelFormat(hDC,&pfd)))

{();(NULL,"Can't Find A Suitable.","ERROR",MB_OK|MB_ICONEXCLAMATION);FALSE;

}

(!SetPixelFormat(hDC,PixelFormat,&pfd))

{();(NULL,"Can't Set The.","ERROR",MB_OK|MB_ICONEXCLAMATION);FALSE;

}

(!(hRC=wglCreateContext(hDC)))

{();(NULL,"Can't Create A GL Rendering.","ERROR",MB_OK|MB_ICONEXCLAMATION);FALSE;

}

(!wglMakeCurrent(hDC,hRC))

{();(NULL,"Can't Activate The GL Rendering.","ERROR",MB_OK|MB_ICONEXCLAMATION);FALSE;

}

(hWnd,SW_SHOW);(hWnd);(hWnd);(width, height);

(!InitGL())

{();(NULL,"Initialization Failed.","ERROR",MB_OK|MB_ICONEXCLAMATION);FALSE;

}

TRUE;

}

CALLBACK WndProc(         HWND       hWnd,        uMsg,         wParam,     lParam)

{(uMsg)

{WM_ACTIVATE:

{(!HIWORD(wParam))

{=TRUE;

}

{=FALSE;

}

0;

}

WM_SYSCOMMAND:

{(wParam)

{SC_SCREENSAVE:SC_MONITORPOWER:0;

};

}

WM_CLOSE:

{(0);0;

WM_KEYDOWN:

{[wParam] = TRUE;0;

}

WM_KEYUP:

{[wParam] = FALSE;0;

}

WM_SIZE:

{(LOWORD(lParam),HIWORD(lParam));0;

}

}

DefWindowProc(hWnd,uMsg,wParam,lParam);

}

WINAPI WinMain(       HINSTANCE      hInstance,   hPrevInstance,              lpCmdLine,                            nCmdShow)

{                 msg;  done=FALSE;

(MessageBox(NULL,"Would You Like To Run In Fullscreen Mode?", "Start FullScreen?",MB_YESNO|MB_ICONQUESTION)==IDNO)

{=FALSE;

}

(!CreateGLWindow("NeHe's Animated Blended Textures Tutorial",640,480,16,fullscreen))

{0;

}

(!done)

{(PeekMessage(&msg,NULL,0,0,PM_REMOVE))

{(msg.message==WM_QUIT)

{=TRUE;

}

{(&msg);(&msg);

}

}

{

((active && !DrawGLScene()) || keys[VK_ESCAPE])

{=TRUE;

}

{(hDC);(keys['T'] && !tp)

{=TRUE;=!twinkle;

}(!keys['T'])

{=FALSE;

}(keys[VK_UP])

{=0.5f;

}(keys[VK_DOWN])

{+=0.5f;

}(keys[VK_PRIOR])

{=0.2f;

}(keys[VK_NEXT])

{+=0.2f;

}

(keys[VK_F1])

{[VK_F1]=FALSE;();=!fullscreen;(!CreateGLWindow("NeHe's Animated Blended Textures Tutorial",640,480,16,fullscreen))

{0;

}

}

}

}();(msg.wParam);

}

Источник: https://www.bibliofond.ru/detail.aspx?id=869849