Алгоритми за отделяне и скриване на невидими линии и повърхнини Доц. М. Иванова Технически университет – София
Jan 25, 2015
Алгоритми за отделяне и скриване на невидими линии и повърхнини
Доц. М. ИвановаТехнически университет – София
Алгоритми за отделяне и скриване на невидими линии и повърхнини
• Постановка на задачата– Дадени са геометричните модели на обекти в моделно
пространство– Използва се дясно ориентирана координатна система– В равнината XY се разполага проекционната равнина– Посоката на наблюдение съвпада с отрицателната
посока на оста OZ, гледната точка се намира в положителната безкрайна точка на оста OZ
– Тримерната сцена се намира между гледната точка и проекционната равнина
– Използва се паралелна проекция при създаване на изображението на сцената
Постановка на задачата
X
Y
Z
O
Алгоритми за отделяне и скриване на невидими линии и повърхнини• Алгоритмите се разделят по определени
признаци:– Според средата от данни, в която работят:• Алгоритми, работещи с елементите от сцената в
моделното пространство• Алгоритми, работещи в пространството на
наблюдателя• Алгоритми от смесен тип, при различните стъпки се
работи в различни пространства
Алгоритми за отделяне и скриване на невидими линии и повърхнини– Според точността:• Точни – работят с предварително зададена точност• Апроксимационни – точността зависи от растерното
устройство
– Според дефиниционната област:• Алгоритми, работещи с изпъкнали многоъгълници• Алгоритми, работещи с тела с криволинейни стени
Алгоритъм за скриване на задни стени
• Алгоритъмът се използва само за единични тела, обградени с плоски стени, представляващи изпъкнали многоъгълници (изпъкнали многостени)
• Работи в моделното пространство• Чрез него не могат да се решат до край
въпросите за скриване на невидимите стени и ръбове при наличие на закриващи се обекти
Алгоритъм за скриване на задни стени
• Аx+By+Cz+D=0 – уравнение на равнините, в които лежат стените на един обект
• По знака на коефициента С може да се определи дали дадена страна се закрива или не от обекта, към който принадлежи
Алгоритъм за скриване на задни стени
• Постановка на алгоритъма:– Аx+By+Cz+D=0 – уравнение на равнина в
тримерното пространство– Разполагаме с дясно ориентирана
координатна система– В равнината лежи стена на изпъкнал
многостен– Вътрешна страна - страната на равнината,
гледаща към вътрешността на обекта– Видима/външна страна – обратната на
вътрешната - посоката на нормалата е от вътрешната към външната страна
Алгоритъм за скриване на задни стени
• Коефициентите A, B, C и D се изчисляват от:
• Точките (x1,y1,z1), (x2,y2,z2) и (x3,y3,z3) от равнината са избрани в посока, обратна на въртене на часовниковата стрелка, гледана от външната страна на равнината
DCzByAx
zzyyxx
zzyyxx
zzyyxx
131313
121212
111
Алгоритъм за скриване на задни стени
• Тогава за всяка точка с координати (x’,y’,z’) от вътрешната страна на една равнина е изпълнено неравенството:
Ax’+By’+Cz’+D<0• точката е или вътре в многостена или
многостенът се намира между нея и разглежданата стена – стената ще бъде невидима
• Ако Ax’+By’+Cz’+D>0 – стената е видима
Алгоритъм за скриване на задни стени
• По условие: – гледната точка се намира
върху положителната посока на оста OZ
– посоката на гледане съвпада с отрицателната посока на оста OZ
• Тогава нормалният вектор N (A,B,C) ще има компонента С, паралелна на посоката на гледане
• Ако C<0 – невидима стена
Посока на гледане
N=(A,B,C)
z
x
y
Алгоритъм за скриване на задни стени
• Ако коефициентите на уравненията на стените не са получени чрез изчисления на координатите на три върха, то се прави предварителен тест с вътрешна точка (x0,y0,z0)
• Ако A’x0+B’y0+C’z0+D’>0 , то коефициентите A’, B’, C’, D’ трябва да се умножат с -1, преди проверката на знака на С’
Алгоритъм за скриване на задни стени
• Чрез този алгоритъм не могат да се отстранят всички невидими стени
• Използват се по-сложни алгоритми– Алгоритъм на Галимберти и Монтанари– Алгоритъм на Робертс– Алгоритъм на Z-буфера– Алгоритъм на Нюел и Санча
Алгоритъм на Галимберти и Монтанари
• Точен алгоритъм, работещ в моделното пространство• Алгоритъм от векторен тип, приложим при скриване на
ръбовете на тримерни обекти с плоски изпъкнали многоъгълни стени
Използва се при създаване на векторни изображения
z
y
xE
F
Алгоритъм на Галимберти и Монтанари
• Всеки ръб Е от един обект се съпоставя с всяка стена F от друг обект търси се един от случаите:
1. Ръбът Е е видим – Е се намира в полупространството на наблюдателя и ограничено от равнината на F
2. Ръбът Е е частично или напълно закрит от равнината на F изследване взаимното разположение на проекциите E’ и F’ в картинната равнина
3. Е попада в двете полупространства, разделени от равнината на F разглеждат се предните два случая
z
y
xE
F
z
y
x
E F
Алгоритъм на Галимберти и Монтанари
• Цикълът на тестване приключва:– При изчерпване на стените {F}– При установяване пълната невидимост на ръба
Eвизуализират се само видимите части на Е,
ако има такиваВремето за работа на алгоритъма е
функция на квадрата на броя на стените на всички обекти
Алгоритъм на Робертс
• Съчетава и доразвива идеите на предните два алгоритъма
• Невидимите линии се скриват при визуализиране
Алгоритъм на Робертс• Алгоритъмът работи с изпъкнали многостени• Неизпъкналите многостени се представят чрез изпъкнали многостени• Състои се от три части
1. Всеки обект отделно се тества за скрити линии и повърхнини2. Останалите видими ръбове се тестват спрямо другите обекти3. Конструират се допълнителни ръбове, получени при взаимното
припокриване на обектите
Алгоритъм на Z-буфера• Алгоритъм за скриване на
невидими повърхнини при работа с растерни устройства
• Работи във визуализационната повърхност (кадровия буфер)
• Използва се Z-буфер , съдържащ информация за координатите на точките по оста OZ
• Аx+By+Cz+D=0 – уравнение на равнината на стената
• В точката (x,y), дълбочината е:
• В съседната точка, дълбочината е:
C
yBxADz
000
..
z
y
x
Z – буфер, съхранява дълбочината z
Визуализационна
повърхност
C
yBxADz
001
.)1.(
C
Azz 01
x0 x1
y0
y1
C
Bzz 01
Алгоритъм на Нюел и Санча• Сортира стените-многоъгълници по дълбочина• Проекциите на стените се извеждат върху екрана в
определен ред, в зависимост от близостта им до наблюдателя
• Най-напред се извеждат върху екрана проекциите на най-отдалечените стени
• Най-близките стени ще закрият далечните, тъй като ще бъдат записани в буфера за регенерация върху тях
• Създават се изображения само върху растерни дисплеи
Алгоритъм на Нюел и Санча
z
y
x1
1
2
2
3
3
4
4
5
5
Алгоритъм на Нюел и Санча
• Три стъпки на алгоритъма:– Подреждане на стените в списък в зависимост от най-
голямата координата Zmax– Разрешаване на неопределеностите, възникнали при
припокриване на z обвивките на стените– Преобразуване на проекциите на стените в растерна
форма в ред на увеличаване на максималните им координати Zmax
Алгоритъм на Нюел и Санча
• Детайлизиране на втората стъпка• Извършване на проверки при припокриване
на z обвивките на стените P и Q:• Тест 1: Припокриват ли се x обвивките на P и
Q? – Не – проекциите на стените не се припокриват –
редът им на извеждане върху екрана е без значение
– Да - P и Q имат общи точки – прави се втори тест
P
Q
Алгоритъм на Нюел и Санча
• Тест 2: Припокриват ли се y обвивките на P и Q? – Не – проекциите на стените не се припокриват – редът им на
извеждане върху екрана е без значение– Да - P и Q имат общи точки – прави се трети тест
• Тест 3: Проверява се дали Р лежи изцяло в пространството, ограничено от равнината на Q, което не съдържа наблюдателя– Да – Q може да закрива Р и Р трябва да остане на мястото си в
списъка – преди Q, за да се визуализира преди Q– Не – прави се четвърти тест
Алгоритъм на Нюел и Санча
• Тест 4: Проверява се дали Q лежи изцяло в пространството, ограничено от равнината на Р, което съдържа наблюдателя– Да – Q може да закрива Р и Р трябва да остане на мястото си в
списъка – преди Q, за да се визуализира преди Q– Не – прави се пети тест
• Тест 5: Проверява се дали проекциите на P’ и Q’ върху XY не се припокриват– Ако не се припокриват – редът им на извеждане върху екрана е
без значение и Р може да остане на мястото си в списъка