Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Дипломний проект(пов.).doc
Скачиваний:
2
Добавлен:
17.09.2019
Размер:
3.97 Mб
Скачать

3.2. Принцип покадрового представлення еволюцій динамічних символів.

Еволюції зображень символу рухомого об’єкту являють собою незначну зміну на екрані вихідного зображення символу при його переміщенні на екрані. Кожну з еволюцій динамічного символу можна записувати і зберігати в окремому файлі, або ж всі еволюції в одному файлі. При відображенні на екрані руху символу на кожній ітерації регенерації кадру із файлу зчитується відповідне зображення символу. При обертальному русі символу його еволюціями є повернені на заданий кут відносно його початкового зображення решта зображень, тобто якщо кутовий крок повороту становить 1º, то всього таких еволюційних зображень буде 360, якщо 2º – то 180, 3º – 120 і т.д.

Під час лінійного переміщення символу його еволюціями виступають набір зображень спрайту, тобто ці зображення видозмінені. Відмітимо, що терміном «спрайт» (англ. sprite – ельф, фея) позначають графічний об'єкт в комп'ютерній графіці, який являє собою растрове зображення, що вільно переміщається по екрану, не затираючи фонову поверхню під час свого руху.

Рис. 3.2. Відображення процесу малювання прозорих спрайтів на канві бітового образу.

3.3. Метод забезпечення «прозорості» растрових символів.

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

У файлі можна зберігати тільки прямокутні малюнки; на екран реально ж виводяться об'єкти довільної форми, і фон повинен затиратися лише в тих місцях, де виводяться точки власне зображення, а не прямокутника, в який це зображення вписано. Щоб правильно вивести спрайт на екран, комп'ютер повинен якимось чином здогадатися, які точки картинки є «істотними» (тобто складовими картинки), а які не є такими. Звичайно для цього використовують поняття прозорого кольору. Для цього вибирається який-небудь колір, який не зустрічається в нашій картинці (звичайно береться який-небудь отруйно-рожевий, брудно-зелений і тому подібні малоприємні кольори), і малюватимемо спрайт на прямокутнику, повністю зафарбованому цим кольором. Після цього треба вказати, що вибраний колір вважається прозорим. Більшість графічних бібліотек (VCL у тому числі) підтримує концепцію прозорого кольору. Реалізовано на практиці це дуже просто: коли функція виведення попіксельно промальовує картинку, вона весь час перевіряє колір поточного піксела, і якщо він виявляється прозорим, то функція не малює його взагалі. Таким чином, в областях, помічених прозорим кольором, залишається фоновий малюнок.

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

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

Принцип растрового маскування. Растрове маскування дозволяє малювати частково прозорі спрайти. Кожний кадр описується двома бітовими образами – масками растрових логічних операцій AND і OR. Маска OR фактично є зображенням фігури в тому вигляді, в якому вона повинна з'явитися на результуючому зображенні. Прозорі пікселі повинні бути абсолютно чорними (індекс 0 для палітри з 256 кольорами). Маска AND – це чорно-білий бінарний силует спрайта. Тут чорна область співпадає з контуром фігури на масці OR, а білі зони об'єднують прозорі пікселі (індекс палітри 255). Спочатку до фонового зображення застосовуємо растрову операцію AND з однойменною маскою. Ця операція вирізує чорну діру в тому місці, де з'явиться спрайт. Потім отриманий бітовий образ логічно складається з маскою OR. Чорні області маски OR зберігають канву результуючого зображення точно так, як і білі на першому кроці. Цей метод точно вставляє фігуру в підготовлений силует, не пошкоджуючи оточуючий картографічний фон, рис. 3.2. Головна перевага цього алгоритму – простота реалізації. До недоліків можна віднести подвоєння обсягу пам'яті для зберігання даних спрайта і не дуже висока швидкодія.

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

Два вкладені цикли здійснюють перевірку прозорості. Якщо sp=0, тобто поточний піксель спрайта чорний, він пропускається. Інакше він включається у фонове зображення. При натисненні кнопки миші функція SetDIBitsToDevice виводить оновлений DIB-спрайт на екран.

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

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]