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

7.5.4. Алгоритм сортування по глибині

У цьому алгоритмі, розробленому Ньюэлом, Ньюэлом і Санча [341], застосовується простий підхід, що складається з трьох кроків:

  1. Упорядкування всіх багатокутників відповідно до їхніх найбільших z-координат.

  2. Вирішення усіх невизначеностей, що виникають при перекритті z-оболонок.

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

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

Цей алгоритм може легко працювати з явним пріоритетом. Пріоритет відіграє роль максимального значення z, причому невизначеностей, зв'язаних із глибиною, у цьому випадку може не бути, оскільки вважається, що кожному пріоритету відповідає своя площина з постійною координатою м. На мал. 7.16 показані деякі типи невизначеностей, необхідність в дозволі яких може виникнути на кроці 2. Як же усуваються ці невизначеності? Позначимо багатокутник, що знаходиться наприкінці упорядкованого списку багатокутників, через Р. До відображення в буфер регенерації цей багатокутник

Мал. 7.16. Випадки, при яких перекриваються оболонки багатокутників.

необхідно порівняти з кожною гранню Q, z-оболонка якої перекриває z-оболонку багатокутника Р. Перевірка складається не більш ніж з п'яти кроків (тестів), що виконуються в порядку зростання складності. Як тільки на кожнім із кроків видається позитивна відповідь, P відразу перетвориться в растрову форму. Цими п'ятьма тестами є наступні:

  1. х-оболонки багатокутників не перекриваються, тому самі багатокутники теж не перекриваються;

  2. у-оболонки багатокутників не перекриваються, тому самі багатокутники теж не перекриваються. (Відзначимо, що в тестах 1 і 2, узятих у сукупності, оболонки розглядаються тому вигляді, як були введені .)

  3. P цілком лежить з тієї сторони від площини Q, що далі від точки зору (цей тест дає негативна відповідь у випадку а на мал. 7.16 і позитивна відповідь у ситуації, показаної на мал. 7.17).

  4. Q цілком знаходиться з тієї сторони від площини P, що ближче до точки зору (цей тест дає негативна відповідь у випадку а на мал. 7.16 і позитивна відповідь у ситуації, показаної на мал. 7.18).

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

Якщо у всіх п'ятьох тестах отриманий негативна відповідь, ми припускаємо, що P дійсно закриває Q, тому поміняємо P і Q місцями в списку, позначивши при цьому, що багатокутник Q був переміщений на нове місце наприкінці списку. У випадку а на мал. 15.6 так воно і є: якщо ми порівняємо Q з P, то знайдемо за допомогою тесту 3 (де P і Q помінялися місцями), що багатокутник Рповинен перетворюватися в растрову форму першим. У випадках же б и e на мал. 7.16 (оскільки не існує площини, поділяючої багатокутники) багатокутник Q рано чи пізно прийдеться знову переміщати в списку, і алгоритм зациклиться.

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

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

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

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

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

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