Реалізація 3-D графіки на OpenGL

Поняття та сфери використання тривимірної графіки. Описання та характеристика можливостей бібліотеки OpenGL. Загальний опис інтерфейсу мови програмування Borland C++, лістинг програми, що демонструє її можливості. Розрахунок витрат на виконання проекту.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык украинский
Дата добавления 24.06.2015
Размер файла 1,6 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

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

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

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

? знизити ефект сумарного впливу відбитих звукових хвиль (звуковбирні поверхні конструкцій);

? застосовувати раціональне розташування устаткування;

? використовувати архітектурно-планувальні і технологічні рішення ізоляцій джерел шуму.

Мікроклімат

Нормалізація мікроклімату приміщення може бути досягнута поліпшенням вентиляції приміщення за рахунок витяжних вентиляторів і нормального функціонування вбудованої вентиляції будинку

Освітлення

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

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

В якості джерела світла при штучному висвітленні повинні застосовуватися переважно люмінесцентні лампи типу ЛБ. При порядкуванні відбитого освітлення в адміністративно-суспільних приміщеннях допускається застосування металогалогених ламп потужністю до 250 Вт. Допускається застосування ламп накалювання у світильниках місцевого освітлення.

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

Для забезпечення нормованих значень освітленості в приміщеннях використання ПЕОМ варто проводити чищення стікол віконних рам і світильників не рідше двох разів у рік і проводити своєчасну заміну перегорілих ламп.

Ергономіка робочого місця

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

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

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

Головними елементами робочого місця програміста є стіл і крісло. Основним робочим положенням є положення сидячи.

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

Для комфортної роботи стіл повинний задовольняти наступним умовам:

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

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

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

? конструкція столу повинна передбачати наявність висувних шухляд (не менше ніж 3 для збереження документації, лістингів, канцелярських предметів);

? висота робочої поверхні рекомендується в межах 680-760 мм. Висота поверхні, на яку встановлюється клавіатура, повинна бути близько 650 мм.

Велике значення надається характеристикам робочого крісла. Так, рекомендована висота сидіння над рівнем підлоги знаходиться в межах 420-550 мм.

Поверхня сидіння м'яка, передній край закруглений, а кут нахилу спинки - регульований.

Необхідно передбачати при проектуванні можливість різного розміщення документів: збоку від відеотермінала, між монітором і клавіатурою і т.п. Крім того, у випадках, коли відеотермінал має низьку якість зображення, наприклад помітні мелькання, відстань від очей до екрана роблять більше (близько 700 мм), чим відстань від ока до документа (300-450 мм). Узагалі при високій якості зображення на відеотерміналі відстань від очей користувача до екрана, документа і клавіатури може бути рівною.

Велике значення також надається правильній робочій позі користувача. При незручній робочій позі можуть з'явитися болі в м'язах, суглобах і сухожиллях. Вимоги до робочої пози користувача відеотермінала наступні:

? голова не повинна бути нахилена більш ніж на 20°,

? плечі повинні бути розслаблені,

? лікті - під кутом 80°…100°,

? передпліччя і кисті рук - у горизонтальному положенні.

Причина неправильної пози користувачів обумовлена наступними факторами: немає гарної підставки для документів, клавіатура знаходиться занадто високо, а документи - низько, нікуди покласти руки і кисті, недостатній простір для ніг.

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

Істотне значення для продуктивної і якісної роботи на комп'ютері мають розміри знаків, щільність їхнього розміщення, контраст і співвідношення яскравості символів і фона екрана. Якщо відстань від очей оператора до екрана дисплея складає 60...80 см, то висота знака повинна бути не менше ніж 3 мм, оптимальне співвідношення ширини і висоти знака складає 3:4, а відстань між знаками - 15...20% їхньої висоти. Співвідношення яскравості фона екрана і символів - від 1:2 до 1:15.

Під час користування комп'ютером медики радять установлювати монітор на відстані 50-60 см від очей. Фахівці також вважають, що верхня частина відеодисплея повинна бути на рівні очей або трохи нижче. Коли людина дивиться прямо перед собою, її очі відкриваються ширше, ніж коли вона дивиться вниз. За рахунок цього, площа огляду значно збільшується, викликаючи зневоднювання очей. До того ж якщо екран установлений високо, а очі широко відкриті, порушується функція моргання. Це значить, що очі не закриваються цілком, не омиваються слізною рідиною, не одержують достатнього зволоження, що приводить до їх швидкої стомлюваності.

Режим праці

Для підтримки тривалої працездатності людини велике значення має режим праці і відпочинку. Під раціональним фізіологічно обґрунтованим режимом праці і відпочинком мається на увазі таке чергування періодів роботи з періодом відпочинку, при якому досягається висока ефективність суспільно-корисної діяльності людини, гарний стан здоров'я, високий рівень працездатності і продуктивності праці.

У таблиці 4 представлені зведення про регламентовані перерви, які необхідно робити при роботі на комп'ютері, в залежності від тривалості робочої зміни, видів і категорій трудової діяльності з ВДТ (відеодисплейний термінал) і ПЕОМ (відповідно до СанПіН 2.2.2 542-96 «Гігієнічні вимоги до відеодисплейних терміналів, персональних електронно-обчислювальних машин і організації робіт»).

Таблиця 4 - Час регламентованих перерв при роботі на комп'ютер

Категорія роботи з ВДТ чи ПОЕМ

Рівень навантаження за робочу зміну при видах роботи з ВДТ

Сумарний час регламентованих пере

Група А, кількість знаків

Група Б, кількість знаків

Група В

При 8-годинній зміні

При 12-годинній зміні

I

до 20000

до 15000

до 2.0

30

70

II

до 40000

до 30000

до 4.0

50

90

III

до 60000

до 40000

до 6.0

70

120

Примітка. Час перерв даний при дотриманні зазначених Санітарних правил і норм. При невідповідності фактичних умов праці вимогам Санітарних правил і норм час регламентованих перерв варто збільшити на 30%.

У відповідності із СанПіН 2.2.2 546-96 усі види трудової діяльності, пов'язані з використанням комп'ютера, розділяються на три групи:

група А: робота зі зчитування інформації з екрана ВДТ чи ПОЕМ із попереднім запитом;

група Б: робота з введення інформації;

група В: творча робота в режимі діалогу з ЕОМ.

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

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

3. ІНСТРУКЦІЯ ПО ОХОРОНІ ПРАЦІ З ЕКСПЛУАТАЦІЇ ЕОМ

3.1 Загальні положення

1. Працюючий на комп'ютері повинен мати не нижче І-ІІ кваліфікаційної групи з електробезпеки.

2. Комп'ютери повинні мати передбачений заводом - виготовлювачем захист від ураження електрострумом.

3. Розташування комп'ютера:

а) комп'ютер встановлюють на відстані не менше 1 м від стін, між собою на відстані не менше як 1,5 м;

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

в) поверхня екрану повинна знаходитись на відстані 400-700 мм, від очей користувача;

г) висота робочої поверхні столу повинна становити 680-800 мм, ширина - не менше 500 мм;

д) стілець повинен мати висоту 280-320 мм, ширину - не менше як 380 мм;

е) повинна бути стійка підставка для ніг шириною не менше 300 мм.

4. Особам, які працюють на комп'ютерах забороняється:

- торкатися обірваних та оголених електричних проводів;

- користуватися пошкодженими розетками та вилками;

- працювати при знятому кожусі на моніторі чи системному блоці;

- працювати на комп'ютерах, монітори яких розташовані один проти другого в межах кімнати (приміщення).

5. При роботі з текстом, інформацією рекомендується працювати на світлому (білому) фоні з чорними знаками.

6. При роботі комп'ютером можуть виникнути небезпечні та шкідливі виробничі фактори: електромагнітні поля (радіочастоти); електростатичне поле; недостатнє освітлення; психоемоційна напруга при тривалій роботі з екраном відеомонітору.

7. Особи, які працюють на комп'ютері повинні дотримуватися наступного режиму праці:

- при введенні даних, читанні інформації з екрану безперервна тривалість роботи не повинна перевищувати 4-х годин при 8-ми годинному робочому дні;

- через кожну годину роботи необхідно робити перерву на 5-10 хвилин, а через 2 години - 15 хвилин;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ВИСНОВКИ

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

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

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

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

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

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

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

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

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

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

1. Aaftab Munshi «OpenGL® ES 2.0 Programming Guide»

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

3. http://open-gl.com/

4. http://opengl.org.ru/

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

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

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

8. http://www.codenet.ru/progr/opengl/

9. А.В.Боресков «Графика трехмерной компьютерной игры на основе OpenGL»

10. Баяковский Ю.М., Игнатенко А.В. «Начальный курс OpenGL»

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

12. Игорь Тарасов. «OpenGL»

13. Паулин Бейкер Компьютерная графика и стандарт OpenGL

14. Ричард С. Райт-мл. и Бенджамин Липчак «OpenGL Суперкнига»

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

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

1. Вступ

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

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

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

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

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

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

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

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

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

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

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

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 hDC=NULL;

HGLRC hRC=NULL;

HWND hWnd=NULL;

HINSTANCE hInstance;

bool keys[256];

bool active=TRUE;

bool fullscreen=TRUE;

bool twinkle;

bool tp;

const num=50;

typedef struct

{

int r, g, b;

GLfloat dist,

angle;

}

stars;

stars star[num];

GLfloat zoom=-15.0f;

GLfloat tilt=90.0f;

GLfloat spin;

GLuint loop;

GLuint texture[1];

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

AUX_RGBImageRec *LoadBMP(char *Filename)

{

FILE *File=NULL;

if (!Filename)

{

return NULL;

}

File=fopen(Filename,"r");

if (File)

{

fclose(File);

return auxDIBImageLoad(Filename);

}

return NULL;

}

int LoadGLTextures()

{

int Status=FALSE;

AUX_RGBImageRec *TextureImage[1];

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

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

{

Status=TRUE;

glGenTextures(1, &texture[0]);

glBindTexture(GL_TEXTURE_2D, texture[0]);

glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);

glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);

glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[0]->sizeX, TextureImage[0]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]->data);

}

if (TextureImage[0])

{

if (TextureImage[0]->data)

{

free(TextureImage[0]->data);

}

free(TextureImage[0]);

}

return Status;

}

GLvoid ReSizeGLScene(GLsizei width, GLsizei height)

{

if (height==0)

{

height=1;

}

glViewport(0,0,width,height);

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

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

glMatrixMode(GL_MODELVIEW);

glLoadIdentity();

}

int InitGL(GLvoid)

{

if (!LoadGLTextures())

{

return FALSE;

}

glEnable(GL_TEXTURE_2D);

glShadeModel(GL_SMOOTH);

glClearColor(0.0f, 0.0f, 0.0f, 0.5f);

glClearDepth(1.0f);

glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);

glBlendFunc(GL_SRC_ALPHA,GL_ONE);

glEnable(GL_BLEND);

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

{

star[loop].angle=0.0f;

star[loop].dist=(float(loop)/num)*5.0f;

star[loop].r=rand()%256;

star[loop].g=rand()%256;

star[loop].b=rand()%256;

}

return TRUE;

}

int DrawGLScene(GLvoid)

{

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glBindTexture(GL_TEXTURE_2D, texture[0])

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

{

glLoadIdentity();

glTranslatef(0.0f,0.0f,zoom);

glRotatef(tilt,1.0f,0.0f,0.0f);

glRotatef(star[loop].angle,0.0f,1.0f,0.0f);

glTranslatef(star[loop].dist,0.0f,0.0f);

glRotatef(-star[loop].angle,0.0f,1.0f,0.0f);

glRotatef(-tilt,1.0f,0.0f,0.0f);

if (twinkle)

{

glColor4ub(star[(num-loop)-1].r,star[(num-loop)-1].g,star[(num-loop)-1].b,255);

glBegin(GL_QUADS);

glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f,-1.0f, 0.0f);

glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f,-1.0f, 0.0f);

glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 0.0f);

glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 0.0f);

glEnd();

}

glRotatef(spin,0.0f,0.0f,1.0f);

glColor4ub(star[loop].r,star[loop].g,star[loop].b,255);

glBegin(GL_QUADS);

glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f,-1.0f, 0.0f);

glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f,-1.0f, 0.0f);

glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 0.0f);

glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 0.0f);

glEnd();

spin+=0.01f;

star[loop].angle+=float(loop)/num;

star[loop].dist-=0.01f;

if (star[loop].dist<0.0f)

{

star[loop].dist+=5.0f;

star[loop].r=rand()%256;

star[loop].g=rand()%256;

star[loop].b=rand()%256;

}

}

return TRUE;

}

GLvoid KillGLWindow(GLvoid)

if (fullscreen)

{

ChangeDisplaySettings(NULL,0);

ShowCursor(TRUE);

}

if (hRC)

{

if (!wglMakeCurrent(NULL,NULL))

{

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

}

if (!wglDeleteContext(hRC))

{

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

}

hRC=NULL;

}

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

{

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

hDC=NULL;

}

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

{

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

hWnd=NULL;

}

if (!UnregisterClass("OpenGL",hInstance))

{

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

hInstance=NULL;

}

}

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

{

GLuint PixelFormat;

WNDCLASS wc;

DWORD dwExStyle;

DWORD dwStyle;

RECT WindowRect;

WindowRect.left=(long)0;

WindowRect.right=(long)width;

WindowRect.top=(long)0;

WindowRect.bottom=(long)height;

fullscreen=fullscreenflag;

hInstance = GetModuleHandle(NULL);

wc.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;

wc.lpfnWndProc = (WNDPROC) WndProc;

wc.cbClsExtra = 0;

wc.cbWndExtra = 0;

wc.hInstance = hInstance;

wc.hIcon = LoadIcon(NULL, IDI_WINLOGO);

wc.hCursor = LoadCursor(NULL, IDC_ARROW);

wc.hbrBackground = NULL;

wc.lpszMenuName = NULL;

wc.lpszClassName = "OpenGL";

if (!RegisterClass(&wc))

{

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

return FALSE;

}

if (fullscreen)

{

DEVMODE dmScreenSettings;

memset(&dmScreenSettings,0,sizeof(dmScreenSettings));

dmScreenSettings.dmSize=sizeof(dmScreenSettings);

dmScreenSettings.dmPelsWidth = width;

dmScreenSettings.dmPelsHeight = height;

dmScreenSettings.dmBitsPerPel = bits;

dmScreenSettings.dmFields=DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT;

Try To Set Selected Mode And Get Results. NOTE: CDS_FULLSCREEN Gets Rid Of Start Bar.

if (ChangeDisplaySettings(&dmScreenSettings,CDS_FULLSCREEN)!=DISP_CHANGE_SUCCESSFUL)

{

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

{

fullscreen=FALSE;

}

else

{

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

return FALSE;

}

}

}

if (fullscreen)

{

dwExStyle=WS_EX_APPWINDOW;

dwStyle=WS_POPUP;

ShowCursor(FALSE);

}

else

{

dwExStyle=WS_EX_APPWINDOW | WS_EX_WINDOWEDGE;

dwStyle=WS_OVERLAPPEDWINDOW;

}

AdjustWindowRectEx(&WindowRect, dwStyle, FALSE, dwExStyle);

if (!(hWnd=CreateWindowEx( dwExStyle,

title,

dwStyle |

WS_CLIPSIBLINGS |

WS_CLIPCHILDREN,

0, 0,

WindowRect.right-WindowRect.left,

WindowRect.bottom-WindowRect.top,

NULL,

NULL,

hInstance,

NULL)))

{

KillGLWindow();

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

return FALSE;

}

static PIXELFORMATDESCRIPTOR pfd=

{

sizeof(PIXELFORMATDESCRIPTOR),1,

PFD_DRAW_TO_WINDOW |

PFD_SUPPORT_OPENGL |

PFD_DOUBLEBUFFER,

PFD_TYPE_RGBA,

bits,

0, 0, 0, 0, 0, 0,

0,

0,

0,

0, 0, 0, 0,

16,

0,

0,

PFD_MAIN_PLANE,

0,

0, 0, 0

};

if (!(hDC=GetDC(hWnd)))

{

KillGLWindow();

MessageBox(NULL,"Can'tCreate A GL Device

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

return FALSE;

}

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

{

KillGLWindow();

MessageBox(NULL,"Can't Find A Suitable

PixelFormat.","ERROR",MB_OK|MB_ICONEXCLAMATION);

return FALSE;

}

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

{

KillGLWindow();

MessageBox(NULL,"Can't Set The

PixelFormat.","ERROR",MB_OK|MB_ICONEXCLAMATION);

return FALSE;

}

if (!(hRC=wglCreateContext(hDC)))

{

KillGLWindow();

MessageBox(NULL,"Can't Create A GL Rendering

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

return FALSE;

}

if(!wglMakeCurrent(hDC,hRC))

{

KillGLWindow();

MessageBox(NULL,"Can't Activate The GL Rendering

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

return FALSE;

}

ShowWindow(hWnd,SW_SHOW);

SetForegroundWindow(hWnd);

SetFocus(hWnd);

ReSizeGLScene(width, height);

if (!InitGL())

{

KillGLWindow();

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

return FALSE;

}

return TRUE;

}

LRESULT CALLBACK WndProc( HWND hWnd,

UINT uMsg,

WPARAM wParam,

LPARAM lParam)

{

switch (uMsg)

{

case WM_ACTIVATE:

{

if (!HIWORD(wParam))

{

active=TRUE;

}

else

{

active=FALSE;

}

return 0;

}

case WM_SYSCOMMAND:

{

switch (wParam)

{

case SC_SCREENSAVE:

case SC_MONITORPOWER:

return 0;

}

break;

}

case WM_CLOSE:

{

PostQuitMessage(0);

return 0;

case WM_KEYDOWN:

{

keys[wParam] = TRUE;

return 0;

}

case WM_KEYUP:

{

keys[wParam] = FALSE;

return 0;

}

case WM_SIZE:

{

ReSizeGLScene(LOWORD(lParam),HIWORD(lParam));

return 0;

}

}

return DefWindowProc(hWnd,uMsg,wParam,lParam);

}

int WINAPI WinMain( HINSTANCE hInstance,

HINSTANCE hPrevInstance,

LPSTR lpCmdLine,

int nCmdShow)

{

MSG msg;

BOOL done=FALSE;

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

{

fullscreen=FALSE;

}

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

{

return 0;

}

while(!done)

{

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

{

if (msg.message==WM_QUIT)

{

done=TRUE;

}

else

{

TranslateMessage(&msg);

DispatchMessage(&msg);

}

}

else

{

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

{

done=TRUE;

}

else

{

SwapBuffers(hDC);

if (keys['T'] && !tp)

{

tp=TRUE;

twinkle=!twinkle;

}

if (!keys['T'])

{

tp=FALSE;

}

if (keys[VK_UP])

{

tilt-=0.5f;

}

if (keys[VK_DOWN])

{

tilt+=0.5f;

}

if (keys[VK_PRIOR])

{

zoom-=0.2f;

}

if (keys[VK_NEXT])

{

zoom+=0.2f;

}

if (keys[VK_F1])

{

keys[VK_F1]=FALSE;

KillGLWindow();

fullscreen=!fullscreen;

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

{

return 0;

}

}

}

}

KillGLWindow();

return (msg.wParam);

}

Размещено на Allbest.ru


Подобные документы

  • Об'єктно-орієнтоване програмування за допомогою Delphi. Основні види проекцій. Поняття контексту відображення та пристрою в бібліотеці OpenGL. Побудова сфери засобами OpenGL: лістинг програми. Алгоритм операції збільшення та зменшення зображення.

    контрольная работа [268,6 K], добавлен 20.09.2009

  • Створення зображення (візуалізація) як завдання комп'ютерної графіки. Методи та алгоритми візуалізації. Трансформація об’єктів в бібліотеці OpengL. Побудова довільної кількості довільного розміру точок на поверхні форми засобами бібліотеки OpengL.

    контрольная работа [2,3 M], добавлен 10.09.2009

  • Дослідження особливостей роботи графічної бібліотеки OpenGL з метою використання її в комп'ютерному моделюванні. Розгляд синтаксису команд та програмного коду команд. Методи максимально реалістичного моделювання горіння вогню. Лістинг програми на мові С.

    курсовая работа [182,0 K], добавлен 22.12.2010

  • Программный код OpenGL. Синтаксис команд OpenGL. OpenGL как конечный автомат. Конвейер визуализации OpenGL. Библиотеки, относящиеся к OpenGL. Библиотека OpenGL. Подключаемые файлы. GLUT, инструментарий утилит библиотеки OpenGL.

    курсовая работа [304,9 K], добавлен 01.06.2004

  • Програма створення графіки OpenGl. Алгоритми зафарбовування від внутрішньої точки до границь довільного контуру. Алгоритм обчислення координати точки кривої Без'є за заданними параметрами. Створення програм OpenGL мовою С, C++ у середовищі Windows.

    контрольная работа [285,3 K], добавлен 19.09.2009

  • Методи поліпшення растрових зображень. Параметри виду, буфер глибини, джерело світла в бібліотеці Opengl. Створення тривимірної фігури та забезпечення її повороту за допомогою Opengl, виконання операції масштабування з використанням клавіші "+" та "-".

    контрольная работа [139,4 K], добавлен 12.09.2009

  • Загальне поняття про метод Якобі. Мова програмування C++ Builder, її призначення. Оператор do-while, його використання. Динамічний розподіл пам’яті. Загальний вигляд інтерфейсу програми, інформація про метод. Реалізація програми, модуль мain.cpp та dfm.

    курсовая работа [320,6 K], добавлен 17.06.2012

  • Визначення поняття автоматизації та інформаційної технології. Вибір мови програмування, аналіз бібліотеки класів та системи масового обслуговування. Реалізація інтерфейсу програми Visual C# 2010 Express. Діаграма класів до основних функцій программи.

    курсовая работа [1,5 M], добавлен 28.04.2012

  • Визначення сили взаємодії двох точкових зарядів. С++ як універсальна мова програмування. Клас - ключове поняття С++. Стандартні бібліотеки С++. Функція конструктора і деструктора. Опис базового класу Objcalc. Лістинг та результат роботи програми.

    курсовая работа [107,6 K], добавлен 27.12.2011

  • Розробка та схема алгоритму проектованої гри. Особливості мови програмування та середовища "Microsoft Visual Studio C++ 2008 Express Edition". Лістинг програми та загальний опис її роботи, аналіз отриманих результатів та оцінка практичної ефективності.

    курсовая работа [762,8 K], добавлен 03.05.2015

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.