50087 (Використання OpenGL. Моделювання вогню)

2016-07-30СтудИзба

Описание файла

Документ из архива "Використання OpenGL. Моделювання вогню", который расположен в категории "". Всё это находится в предмете "информатика" из 1 семестр, которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "курсовые/домашние работы", в предмете "информатика, программирование" в общих файлах.

Онлайн просмотр документа "50087"

Текст из документа "50087"

Міністерство освіти і науки України

Рівненський державний гуманітарний університет

Факультет математики та інформатики

Кафедра інформатики та прикладної математики

КУРСОВА РОБОТА

на тему:

Використання opengl. Моделювання вогню

Виконав:

студент 4 курсу

спеціальності “інформатика”

групи І-41: Антонішин В.В.

Науковий керівник:

Ярощак Сергій Вікторович

Рівне – 2010

ЗМІСТ

ВСТУП

РОЗДІЛ 1. Програмний код та синтаксис OpenGL

1.1 Програмний код OpenGL

1.2 Синтаксис команд OpenGL

РОзділ 2. Конвеєр візуалізації та бібліотеки, що відносяться до OpenGL

2.1 Конвеєр візуалізації OpenGL

2.1.1 Конвеєр

2.1.2 Списки виводу

2.1.3 Обчислювачі

2.1.4 Операції обробки вершин

2.1.5 Збірка примітивів

2.1.6 Операції обробки пікселів

2.1.7 Збірка текстури

2.1.8 Растеризація

2.1.9 Операції обробки фрагментів

2.2 Бібліотеки, що відносяться до OpenGL

2.2.1 Бібліотека OpenGL

2.2.2 Файли, що підключаються

2.2.3 GLUT, інструментарій утиліт бібліотеки OpenGL

РОЗДІЛ 3. АНІМАЦІЯ КОМП'ЮТЕРНОЇ ГРАФІКИ НА ПРИКЛАДІ МОДЕЛЮВАННЯ ВОГНЮ

3.1 Анімація комп'ютерної графіки

3.2 Моделювання вогню

ВИСНОВКИ

ЛІТЕРАТУРА


ВСТУП

Комп'ютерна графіка знайшла широке поширення і застосування в повсякденному житті. Учені використовують комп'ютерну графіку для аналізу результатів моделювання. Інженери і архітектори використовують тривимірну графіку для створення віртуальних моделей. Кінематографісти створюють спецефекти або повністю анімовані фільми («Шрек», «Історія іграшок» та ін.). Останніми роками широке поширення отримали також комп'ютерні ігри, що максимально використовують тривимірну графіку для створення віртуальних світів.

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

Silicon Graphics Incorporated (SGI) спеціалізувалася на створенні високотехнологічного графічного устаткування і програмних засобів. Будучи у той час лідером в тривимірній графіці, SGI бачила проблеми і бар'єри в рості ринку. Тому було прийнято рішення стандартизувати метод доступу до графічної апаратури на рівні програмного інтерфейсу.

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

У 1992 році компанія SGI очолила OpenGL ARB — групу компаній по розробці специфікації OpenGL. OpenGL еволюціонував з 3D-інтерфейса SGI — IRIS GL. Одним з обмежень IRIS GL було те, що він дозволяв використовувати тільки можливості, підтримувані устаткуванням; якщо можливість не була реалізована апаратно, застосування не могло її використовувати. OpenGL долає цю проблему за рахунок програмної реалізації можливостей, що не надаються апаратно і дозволяє використовувати цей інтерфейс на відносно малопотужних системах.

У 1995 році була випущена бібліотека Direct3D від Microsoft. Незабаром Microsoft, SGI і Hewlett - Packard почали проект під назвою Fahrenheit, який передбачав створення більше універсального програмного інтерфейсу на основі Direct3D і OpenGL. Ідея здавалася багатообіцяючою, покликаною навести лад в області інтерактивної тривимірної графіки, проте, в результаті фінансових труднощів в SGI і відсутності належної індустріальної підтримки, проект був закритий. Правда, пізніше, 16 вересня 2005 року, він все-таки був випущений.

OpenGL орієнтується на наступні два завдання:

  • Приховати складнощі адаптації різних 3D-прискорювачів, надаючи розробникові єдиний API.

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

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

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

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

Завдання полягає у написанні програми моделювання горіння вогню з використанням графічної бібліотеки OpenGL.

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

РОЗДІЛ 1. Програмний код та синтаксис команд OpenGL

1.1 Програмний код OpenGL

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

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

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

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

Приклад 1. Фрагмент програмного коду OpenGL

finclude ,

main () {

InitializeAWindowPlease();

glClearColor(0.0, 0.0, 0.0, 0.0); glClear(GL_COLOR_BUFFER_BIT); glColor3f(1.0, 1.0, 1.0);

glOrtho(0.0, 1.0, 0.0, 1.0, - 1.0, 1.0); glBegin(GL_POLYGON);

glVertex3f(0.25, 0.25, 0.0);

glVertex3f (0.75, 0.25, 0.0);

glVertex3f(0.75, 0.75, 0.0);

glVertex3f(0.25, 0.75, 0.0); glEnd() ; glFlush () ;

UpdateTheWindowAndCheckForEvents(); }

Перший рядок функції main() ініціалізував певне вікно на екрані: функція InitializeAWindowPlease() використовується в даному випадку в якості мітки-"заповнювача" для підпрограм специфічних віконних систем, які в загальному випадку не є викликами OpenGL. Наступні два рядки містять команди OpenGL, які встановлюють чорний колір фону для вікна: функція glCIearCoIor() визначає, який колір фону буде встановлений для вікна, а функція glClear() фактично встановлює колір вікна. Як тільки колір фону встановлений, вікно заливається цим кольором всякий раз, коли викликається функція glClear(). Цей колір фону може бути змінений за допомогою другого виклику функції glClearColor(). Так само функція glColor3f() встановлює, який колір слід використовувати для промальовування об'єктів на екрані - в даному випадку цей колір є білим. Усі об'єкти, що виводяться на екран після цього моменту, використовують цей колір до тих пір, поки він не буде змінений за допомогою наступного виклику команди установки кольору.

Наступна функція OpenGL, використовувана в даній програмі, glOrtho(), визначає систему координат, яку OpenGL приймає для промальовування остаточного зображення, і те, як це зображення відображається на екрані. Виклики, розміщені між функціями glBegin() і glЈnd(), визначають об'єкт, який буде виведений на екран, в даному прикладі це багатокутник з чотирма вершинами. "Кути" багатокутника визначаються за допомогою функції glVertex3f(). Як ви, напевно, вже здогадалися, виходячи зі значень параметрів цієї функції, які є координатами (х, у, z), цей багатокутник є прямокутником, розташованим на площині z(z - 0).

Нарешті, функція gIFlush() гарантує, що команди промальовування фактично виконуються, а не просто зберігаються в деякому буфері, чекаючи додаткових команд OpenGL. Підпрограмма-"заповнювач" UpdateTheWindowAndCheckForEvents() управляє вмістом вікна і починає обробку подій.

1.2 Cинтаксис команд OpenGL

Як ви, ймовірно, могли помітити з прикладу програми, приведеного в попередньому розділі, команди бібліотеки OpenGL використовують префікс gl. Кожне слово, що становить найменування команди, починається із заголовної букви (згадайте, наприклад, функцію glClearColor()). Так само імена констант, визначених у бібліотеці OpenGL, починаються з префікса GL_, записуються заголовними буквами і використовують символи підкреслення, щоб розділити окремі слова (наприклад, GL__COLOR_BUFFER_BIT).

Ви, ймовірно, також змогли помітити деякі символи, які здалися вам сторонніми, вони додаються в кінець найменування деяких команд (наприклад, 3f у функціях glColor3f() і glVertex3f()). Дійсно, частина Color в найменуванні функції glColor3f() достатньо для того, щоб визначити цю команду як команду, що встановлює поточний колір. Проте було визначено декілька таких команд, щоб ви змогли використовувати їх з різними типами параметрів. Зокрема, частина 3 суфікса вказує, що для цієї команди задаються три параметри; інша версія команди Color використовує чотири параметри. Частина f суфікса вказує на те, що параметри цієї команди є числами з плаваючою крапкою. Наявність різних форматів дозволяє бібліотеці OpenGL приймати дані користувача в його власному форматі даних.

Деякі команди бібліотеки OpenGL допускають використання 8 різних типів даних в якості своїх параметрів. Букви, використовувані в якості суфіксів для того, щоб визначити ці типи даних для реалізації ISO З бібліотеки OpenGL, представлені в Таблиці 1.2; там же приведені відповідні визначення типів у бібліотеці OpenGL. Конкретна реалізація бібліотеки OpenGL, яку ви використовуєте, може не співпадати в точності з приведеною схемою; наприклад, реалізації для мов програмування C++ або Ada, не вимагають цього.

Таблиця 1.2. Суфікси найменування команд і типи параметрів

Тип даних

Тип, що відповідає типу даних мови програмування С

Визначення типів даних бібліотеки OpenGL

8-розрядне ціле

signed char

GLbyte

16-розрядне ціле

short

GLshort

32-розрядне ціле

Int або long

GLint, GLsizei

32-розрядне число з плаваючою крапкою

float

GLfloat, GLclampf

64-розрядне число з плаваючою крапкою

double

GLdouble, GLclampd

8-розрядне беззнакове ціле

unsigned char

GLubyte, GLboolean

16-розрядне беззнакове ціле

unsigned short

GLushort

32-розрядне беззнакове ціле

unsignedint або

unsigned long

GLuint, GLenum, GLbitfield

Таким чином, дві команди glVertex2i (1,3); glVertex2f (1.0, 3.0); є еквівалентними, за винятком того, що перша з них визначає координати вершини як 32-розрядні цілі числа, а друга визначають їх як числа з плаваючою крапкою з одинарною точністю.

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

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Нашёл ошибку?
Или хочешь предложить что-то улучшить на этой странице? Напиши об этом и получи бонус!
Бонус рассчитывается индивидуально в каждом случае и может быть в виде баллов или бесплатной услуги от студизбы.
Предложить исправление
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5076
Авторов
на СтудИзбе
455
Средний доход
с одного платного файла
Обучение Подробнее