на тему рефераты Информационно-образоательный портал
Рефераты, курсовые, дипломы, научные работы,
на тему рефераты
на тему рефераты
МЕНЮ|
на тему рефераты
поиск
Програмування трьохмірної графіки та анімації засобами Turbo Pascal
p align="left">З спостерігачем пов'язана точка спостереження й напрямок спостереження. Ефект перспективи обернено-пропорційний відстані від об'єкта до точки спостереження. Якщо око розташоване далеко від об'єкту, то паралельні лінії про об'єкта будуть здаватися паралельними й спостерігачеві. Якщо приблизитися до об'єкта на досить близьку відстань, ефект перспективи підсилиться

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

Перехід відбувається у два етапи. Є система видових координат, пов'язана зі спостерігачем. Світові координати перетворяться у видові за допомогою видового перетворення, потім видові координати перетворюються в екранні. Це - перспективне перетворення.

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

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

Прямокутні координати точки спостереження у світовій системі координат зв'язані зі сферичними координатами (?, ?, ?) наступними співвідношеннями:

,(1.28)

(1.29)

(1.30)

(1.31)

Перетворення координат точки з світової системи координат у видову виконується за допомогою перетворення:

(1.32)

де V - матриця перетворення

(1.33)

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

Різновидність паралельної проекції - ортогональна проекція - отримуються ігноруванням z-координати після переходу у видову систему координат.

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

(1.34)

У диметричній проекції, що також відноситься до числа ортогональних, вісь z проектується на вісь v екранної системи координат, а проекції осей x і y складають заданий кут а з негативною й позитивною півосями осі u. Диметрична проекція включає ізометричну як частковий випадок [17].

У косокутній проекції осі y i z світової системи координат співпадають з осями u i v екранної системи, а проекція осі х становить заданий кут а з негативною півосю v.

1.3 Алгоритми видалення невидимих ребер та граней

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

Є різні алгоритми видалення невидимих частин. Деякі із них засновані на сортуванні граней по відстані від спостерігача. Нехай є дві грані, що перебувають на різній відстані від точки спостереження (Рис. 1.5).

Рис. 1.5. Розташування закритих граней об'єкта щодо спостерігача

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

Алгоритми видалення невидимих граней можуть бути умовно поділені на два класи залежно від принципів, закладених для їхньої реалізації. Перший клас - це алгоритми що працюють в просторі об'єкта. Це означає, що для визначення видимості даної грані рівняється її взаємне розташування з усіма іншими гранями в тривимірній сцені. Нехай N - кількість граней у тривимірній сцені. Для побудови тривимірної сцени в цьому випадку необхідно зрівняти положення кожної грані із тими, що залишилися, це вимагає порядку операцій. Наприклад, нехай кількість граней у тривимірній сцені , тоді час роботи алгоритмів цього класу порядку 1 000 000 операцій [11].

Другий клас алгоритмів - працюючих у просторі зображення, заснований на знаходженні точки найближчої грані яку перетинає промінь зору, що проходить через задану точку на екрані. Оскільки число точок на растровому екрані фіксоване, то алгоритми цього класу менш чутливі до збільшення кількості об'єктів у тривимірній сцені. Нехай n - число точок на растровому екрані. Тоді кількість операцій, необхідних для побудови тривимірної сцени буде порядку . Наприклад, для екранного розширення 320 200 точок, 64000, тоді кількість операцій для 1000 граней буде порядку 64 000 000. Вибір класу алгоритму може залежати від особливостей конкретної задачі, а також від способів реалізації алгоритму.

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

, (1.35)

, (1.36)

, (1.37)

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

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

Розглянутий алгоритм не дуже ефективний, оскільки припускає вивід навіть тих частин об'єкта, які спостерігачеві не видні. Є й інші алгоритми видалення невидимих частин об'єкта. Серед них алгоритм z-буфера й деякі інші.

Z-буфер являє собою "поточкову" копію екрана, яку можна зберігати, наприклад, у виді масиву цілих значень. Спочатку всім елементам цього масиву привласнюються початкові значення, рівні максимально припустимим цілим. Кожній точці зображення поверхні зіставляється значення відстані від цієї точки до площини спостереження. При виводі зображення чергової точки поверхні це значення параметра рівняється зі значенням, записаним для неї в z-буфері. Якщо при цьому виявляється, що значення з z-буфера більше, графічна крапка виводиться на екран, тому що вона перебуває ближче до спостерігача. Відстань до точки заноситься в z-буфер. У протилежному випадку графічна точка не виводиться, оскільки вона "затуляється" уже намальованою точкою. Описаний алгоритм виявляється більш ефективним при побудові складних поверхонь, хоча і вимагає додатковий затрат пам'яті.

Ще один метод визначення невидимих поверхонь заснований на використанні нормалі - перпендикуляра до поверхні грані. Якщо вважати, що нормаль спрямована з об'єкта назовні, то у видовій системі координат проекція нормалі па вісь z, яку ми вважаємо що вона іде до площини екрану і спостерігача, буде позитивною, у тому випадку, коли грань видна спостерігачеві, і негативної, коли не видна. Як побудувати нормаль? Якщо вважати, що дві сторони багатокутника, що виходять із загальної вершини, є векторами, то їхній векторний добуток можна прийняти за нормаль до поверхні цього багатокутника. Напрямок нормалі буде однозначно визначено, якщо задано порядок векторних співмножників. Спрощений варіант даного алгоритму укладається в те, що вершини грані нумеруються по годинниковій стрілці. Якщо подивитися на цю грань із "тильної" сторони, нумерація вершин буде йти проти годинникової стрілки. Порядок нумерації, таким чином, можна використати для визначення того, чи видна дана грань із обраної точки спостереження [12].

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

Рис. 1.6. Перетинання прямої AB із площинами граней призми

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

1.4 Методи програмування динамічних зображень

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

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

(1.38)

де а - амплітуда, a t - параметр, що грає роль часу. Анімація використається для виведення тимчасової залежності графіка функції. Оскільки мова йде про вивід тривимірного об'єкта, необхідно вибрати проекцію, наприклад симетричну поверхня зображується лініями її перетинання із площинами, паралельними площинам х0z і у0z. Через певний час попереднє зображення "затирається" чорними кольорами. При цьому спостерігається неприємне мерехтіння екрана.

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

Подальша оптимізація може бути досягнута за рахунок більш акуратного програмування основних графічних процедур. Для цього, як правило, доводиться вставляти у вихідний текст програми фрагменти коду мовою асемблера [3].

Є й інші проблеми, які доводиться вирішувати при програмуванні динамічних зображень. Так, наприклад, переміщення об'єкта може відбуватися на тлі нерухомого зображення. При цьому необхідно тимчасово зберігати невидимі ділянки тла й відновлювати його після того, як об'єкт зміститься в нове положення. Одне з рішень даної проблеми полягає у використанні спрайтів - апаратних або програмних засобів формування динамічного зображення. Спрайт являє собою растрове зображення невеликого розміру, що може переміщатися по екрані незалежно від іншої "картинки". Спрайт накладається на основне зображення, перекриваючи його [15].

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

РОЗДІЛ ІІ. ПРАКТИЧНА РЕАЛІЗАЦІЯ 3D ОБ'ЄКТІВ ТА ДИНАМІЧНИХ ПОДІЙ

2.1 Модуль обробки 3d об'єктів

Для відображення можливостей роботи із об'ємними фігурами нами було створено відповідний модуль, що дає змогу:

- перетворювати 3d координати в 2d координати монітора;

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

- повертати точку відносно центру координат;

- повертати точку відносно певного вектору;

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

- проводити масштабування точок відносно початку координат;

- рухати точку у довільному напрямку.

Страницы: 1, 2, 3



© 2003-2013
Рефераты бесплатно, курсовые, рефераты биология, большая бибилиотека рефератов, дипломы, научные работы, рефераты право, рефераты, рефераты скачать, рефераты литература, курсовые работы, реферат, доклады, рефераты медицина, рефераты на тему, сочинения, реферат бесплатно, рефераты авиация, рефераты психология, рефераты математика, рефераты кулинария, рефераты логистика, рефераты анатомия, рефераты маркетинг, рефераты релиния, рефераты социология, рефераты менеджемент.