Modelování
Přednáška 9
3D grafika
Žára, J., Beneš, B., Felkel, P. Moderní počítačová grafika. Computer Press, Brno, 1998. ISBN 80-7226-049-9. Pelikán, J. PC-prostorové modelování. Grada, Praha, 1992. ISBN 80-85424-53-3. Beneš, B., Felkel, P., Sochor, J., Žára, J. Skripta Vizualizace. Foley, Van D. Computer Graphics. Principles and Practice. Addison-Wesley,1991. 1
Počítačová grafika, PV, UPCE-KID, [2010/2011]
Hranový model
Počítačová grafika, PV, UPCE-KID, [2010/2011]
Přednáška 9
2
Objemový model
Drátěný model (Wireframe Model) Popsán pomocí vrcholů a hran Prakticky nestačí na popis tělesa Nedefinuje hmotu tělesa, objem Nejednoznačnosti např. při dělení tělesa
Počítačová grafika, PV, UPCE-KID, [2010/2011]
Definování tvaru prostorových objektů za pomoci datových struktur a algoritmů pro vytváření a následnou manipulaci s 3D objekty 3D objekt vyplňuje jistou prostorovou oblast, která může a nemusí být souvislá Hmota tělesa je ohraničena stěnami, které jsou vymezeny hranami, přičemž každá hrana začíná a končí ve vrcholu Hrany jsou uspořádány do smyček, které vymezují danou stěnu Nejčastěji používané modely
hranový model
povrchový model
objemový model
…
Přednáška 9
3
Volume Model, Solid Model Pracuje s objemem, ale neposkytuje přímo povrch tělesa Definice prostoru, který je součástí tělesa Elementární objemová jednotka – voxel (volume element) Jedna z možných reprezentací – oktalový strom
Počítačová grafika, PV, UPCE-KID, [2010/2011]
Přednáška 9
4
Oktalový strom
CSG modely
1
2
3
4
5
6
7
8
Konstruktivní geometrie těles (Constructive Solid Geometry) Representace těles pomocí stromu složeného z CSG primitiv (kvádr, koule, válec, kužel, poloprostor, toroid), množinových operací (sjednocení, rozdíl, průnik) a transformací Snadné napodobení obráběcích operací
5678 1234 Počítačová grafika, PV, UPCE-KID, [2010/2011]
Přednáška 9
5
Šablonování
Počítačová grafika, PV, UPCE-KID, [2010/2011]
6
Přednáška 9
8
Povrchový model
Rotační a přímkové (křivkové)
Tažení (sweep)
Rotace
Přednáška 9
Používá se tam, kde např. konstrukce množinovými operacemi není vhodná
Těleso je sestaveno z ploch Problémy při výpočtu objemu, těžiště, momentů, ... Umožňuje vytvoření tělesa "bez objemu" K definici se používají analyticky definované plochy a především B-spline a Bezierovy plochy
Zdroj: PELIKÁN, J., PC-PROSTOROVÉ MODELOVÁNÍ
Počítačová grafika, PV, UPCE-KID, [2010/2011]
Přednáška 9
7
Počítačová grafika, PV, UPCE-KID, [2010/2011]
Editace a zobrazení povrchového modelu
Počítačová grafika, PV, UPCE-KID, [2010/2011]
Přednáška 9
Srovnání modelů
9
3D transformace
Přednáška 9
Počítačová grafika, PV, UPCE-KID, [2010/2011]
10
Transformační matice
Princip podobný jako u 2D transformací Některé transformace lze provádět postupně po složkách x, y, z Otáčení se provádí okolo osy otáčení
Souřadnice bodu P = [x, y, z] se vlivem transformace upraví na P´ = [x´, y´, z´]
[x'
y ' z '] = [x
y
z] A
P ' = PA
Projekce (v 3D) Lineární transformace: posunutí otočení změna měřítka zkosení
Počítačová grafika, PV, UPCE-KID, [2010/2011]
Přednáška 9
11
Pro jednotný maticový výpočet budeme používat čtvercovou matici o rozměru (n+1) x (n+1) Vektor souřadnic rozšíříme o souřadnici w (homogenizační faktor, w<>0, nejčastěji w=1), původní souřadnice upravíme vynásobením nebo vydělením hodnotou w Transformační matice má pro 3D prostor rozměr 4x4 nebo 4x3
Počítačová grafika, PV, UPCE-KID, [2010/2011]
Přednáška 9
12
Posunutí
Otočení (osa otočení shodná s osou SS)
Posunutí bodu P do bodu P´ o vektor t Vektor posunutí t = (tX , tY , tZ ) = ( x´− x, y´− y, z´− z) Explicitní výpočet souřadnic P´
x´= x cos α − y sin α y´= x sin α + y cosα
x' = x + tX y' = y + tY z ' = z + tZ
z´= z
Maticové vyjádření posunutí ⎡1 ⎢0 AM = ⎢ ⎢0 ⎢ ⎣t X
Otočení bodu P se v prostoru provádí okolo zvolené osy o orientovaný úhel α do bodu P´ Explicitní výpočet souřadnic P´ pro jednotlivé osy
0
0
1
0
0
1
tY
tZ
0⎤ 0⎥⎥ 0⎥ ⎥ 1⎦
Počítačová grafika, PV, UPCE-KID, [2010/2011]
tZ tX tY
Přednáška 9
13
Otočení (osa otáčení || s některou osou SS)
x´= x cos α − z sin α
y´= y cos α + z sin α z´= y sin α − z cos α
y´= y
z´= x sin α + z cos α
Maticové vyjádření otočení pro osu z ⎡ cos α ⎢− sin α ARZ = ⎢ ⎢ 0 ⎢ ⎣ 0
t
x´= x
sin α
0 0⎤ 0 0⎥⎥ 1 0⎥ ⎥ 0 1⎦
cos α 0 0
α Přednáška 9
Počítačová grafika, PV, UPCE-KID, [2010/2011]
14
Obecné otočení P' = PA az − ay 0⎤ ⎡ 0 ⎥ ⎢− az 0 ax 0⎥ + sin(α ) ⎢ ⎢ ay − ax 0 0⎥ ⎥ ⎢ 0 0 1⎦⎥ ⎣ 0
⎡ a x2 axay azay ⎢ axay a y2 ayaz r AR ( a , α ) = cos(α ) I + (1 − cos(α )) ⎢ ⎢ axaz ayaz a z2 ⎢ 0 0 ⎣⎢ 0
⎡ 1 ⎢ 0 AT = ⎢ ⎢ 0 ⎢ ⎣− qX
Realizace složenou transformací
ASLOŽENÁ = AT * AR * AT −1 Počítačová grafika, PV, UPCE-KID, [2010/2011]
0 1 0 − qY
0 0 1 − qz
0⎤ 0⎥⎥ 0⎥ ⎥ 1⎦
P
0⎤ 0⎥⎥ 0⎥ ⎥ 0⎦
a
α
P’
p p’ O
-q
Q[qx, qy, qy]
A = AT * AR ( ar , α ) * A T−1 Přednáška 9
15
Počítačová grafika, PV, UPCE-KID, [2010/2011]
Přednáška 9
16
Zkosení
Změna měřítka
Záleží na výběru os, v jejichž směru zkosení probíhá Koeficienty shX, shY, shZ Explicitní výpočet souřadnic P´
Příklad pro zkosení ve směru roviny xy (pro x i y)
(pouze x, shY=0)
(pouze y, shX=0)
x´=x+shXz x´=x+shXz x´=x y´=y+shYz y´=y y´=y+shYz z´=z z´=z z´=z Maticové vyjádření zkosení 0 0 0⎤ ⎡1 ⎡1 0 0 ⎢0 ⎥ ⎢sh 1 shz 1 0 0⎥ ⎢ Ashxy = Ashxz = ⎢ x ⎢shx shy 1 0⎥ ⎢0 0 1 ⎢ ⎥ ⎢ 0 0 1⎦ ⎣0 ⎣0 0 0
0⎤ 0⎥⎥ 0⎥ ⎥ 1⎦
⎡1 shy shz ⎢0 1 0 Ashyz = ⎢ ⎢0 0 1 ⎢ 0 ⎣0 0 Přednáška 9
Počítačová grafika, PV, UPCE-KID, [2010/2011]
0⎤ 0⎥⎥ 0⎥ ⎥ 1⎦ 17
Symetrie
Přednáška 9
Počítačová grafika, PV, UPCE-KID, [2010/2011]
18
Uživatelské souřadnicové systémy
souměrnost dle středu, osy a roviny Upozornění: při souměrnosti dochází ke změně orientace stěn (proti směru a po směru hodinových ručiček)
Středová souměrnost = složená souměrnost dle všech rovin Osová souměrnost (x) = složená souměrnost dle dvou rovin (xy a xz) souměrnost dle
sX
sY
sZ
středu
-1
-1
-1
osy x
1
-1
-1
osy y
-1
1
-1
osy z
-1
-1
1
roviny xy
1
1
-1
roviny xz
1
-1
1
roviny yz
-1
1
1
Počítačová grafika, PV, UPCE-KID, [2010/2011]
Změna velikosti objektu ve směru souřadnicových os o koeficienty sx, sy, sz |s|∈(0,1) ----> zmenšení objektu |s|>1 ----> zvětšení objektu s<0 ----> dochází ke změně měřítka v opačném směru Explicitní výpočet souřadnic P´ x´= sx z y´= sy z z´= sz z Maticové vyjádření ⎡ s x 0 0 0⎤ ⎢0 s 0 0⎥⎥ y AS = ⎢ ⎢ 0 0 s z 0⎥ ⎢ ⎥ ⎣ 0 0 0 1⎦
Levotočivý Right-handed
z
z
z y
19
Počítačová grafika, PV, UPCE-KID, [2010/2011]
x
y
y
x
Přednáška 9
Pravotočivý Left-handed
x
x
z y
Přednáška 9
20
Promítání
Kolmé promítání – Mongeova projekce
Způsob zobrazování 3D grafiky ve 2D prostoru Promítací rovina (průmětna) – plocha, na které se zobrazuje 2D obraz Kolmá projekce
požívaná v technickém kreslení
málo názorné Rovnoběžné promítání – všechny paprsky jsou rovnoběžné
Axonometrie
Perspektiva
Izometrie Středové promítání – paprsky vychází z jednoho bodu
Půdorys
je dán rovinou XY
Z=0 Bokorys
je dán rovinou XZ
Y=0 Nárys
je dán rovinou YZ
X=0
X´= Y Y´= -X
X´= -X Y´= Z
X´= Y Y´= Z z
y
x Přednáška 9
Počítačová grafika, PV, UPCE-KID, [2010/2011]
21
Rovnoběžné promítání
Průmětna nemusí být rovnoběžná s osami, protíná 2 nebo 3 osy Zachovává se rovnoběžnost hran, úhly se mění
y z Jz
x
Jx
x
β α
Jy
Technická axonometrie
Kabinetní projekce JX = 0,5
Kavalírská projekce JX = 1
Izometrie
Dimetrie
Trimetrie
Jy = Jz = 1
α = 45° (30 °), β = 0°
Jy = Jz = Jx α=β
y
x = -JX * cos(α) * xB + JY * cos(β) * yB y = -JX * sin(α) * xB - JY * sin(β) * yB + JZ * zB xB, yB, zB - souřadnice bodu v 3D x, y - jsou promítací souřadnice 2D JX , JY, JZ - jsou jednotkové vektory daného promítání α, β - úhly svírající 3D osy s osami 2D
Počítačová grafika, PV, UPCE-KID, [2010/2011]
22
Typy rovnoběžného promítání
α
Přednáška 9
Počítačová grafika, PV, UPCE-KID, [2010/2011]
Přednáška 9
23
Počítačová grafika, PV, UPCE-KID, [2010/2011]
Jy = Jx α=β
Jy <> Jx <> Jz α=β
Přednáška 9
24
Středové promítání
Viditelnost – konvexního tělesa
Perspektivní promítání Realistické zobrazení větších objektů Určeno průmětnou a středem promítání
D D+z D y ' = y. D+z
x' = x.
Každý mnohostěn je určen konečným počtem stěn Stěny lze rozdělit na přední (viditelné) a zadní (neviditelné) V kresbě budou viditelné hrany:
předních stěn
zadních stěn, které jsou součástí některé přední stěny Základem je zachování orientace vrcholů stěny U každé stěny určíme orientaci vrcholů v 3D a poté porovnáme s orientací v 2D scéně
wZDROJ: CENEK, P., POČÍTAČOVÁ GRAFIKA, Univerzita Pardubice, 1999, ISBN 80-7194-229-4
Střed leží na ose z ve vzdál. -D, průmětna je tvořena rovinou xy.
Počítačová grafika, PV, UPCE-KID, [2010/2011]
Přednáška 9
25
… algoritmus viditelnosti 1. 2. 3. 4.
Každou stěnu popíšeme tak, aby orientace vrcholů byla proti směru hodinových ručiček Provedeme projekci a zjistíme souřadnice všech vrcholů ve 2D obrazu Všechny hrany označíme jako neviditelné Pro všechny stěny zjistíme viditelnost, pokud je stěna viditelná, její hrany označíme za viditelné. Pro zjištění orientace použijeme např. vektorový součin vektorů prvních dvou hran dané stěny (A1,A2), (A2,A3) D = x 2 − x1 y 2 − y1 x3 − x 2 y 3 − y 2 Pokud je D>0, potom vektor směřuje před průmětnu Vykreslíme viditelné hrany
Počítačová grafika, PV, UPCE-KID, [2010/2011]
26
Orientace vrcholů v 3D a v 2D
5.
Přednáška 9
Počítačová grafika, PV, UPCE-KID, [2010/2011]
Přednáška 9
27
Stěny kvádru jsou definovány posloupností vrcholů. Příklady definice dvou stěn: (A, B, C, D) a (F, E, H, G) G H G
H D
C
E A
D
F B
Při pohledu v 3D z tohoto místa jsou vrcholy stěny (A, B, C, D) orientovány proti směru HR Počítačová grafika, PV, UPCE-KID, [2010/2011]
C
E A Při pohledu v 3D na kvádr z tohoto místa jsou vrcholy stěny (F, E, H, G) orientovány rovněž proti směru HR
F B Při pohledu na 2D obraz kvádru, zobrazený na průmětně, zůstala orientace (A, B, C, D) nezměněna (proti směru HR, proto je přední) a orientace (F, E, H, G) je změněna (po směru HR, proto je zadní) Přednáška 9
28
Malířův algoritmus
Malířův algoritmus
Jednotlivé stěny seřadíme v reálné 3D scéně podle vzdálenosti od průmětny. Určující je minimální/maximální hodnota z mezních souřadnic u každé stěny. Kreslení jednotlivých stěn provedeme směrem odzadu dopředu (je nutno testovat, zda aktuální /nejvzdálenější/ stěna nezakrývá část jiné stěny – viz následující testy). Tento postup není vhodný na zjištění viditelnosti hran. Při vykreslování více objektů mohou nastat problémy se vzájemným překrýváním a cyklickým opakováním.
Nejprve je nakreslen nejvzdálenější objekt (hory), poté louka a jako poslední jsou kresleny nejbližší objekty (stromy). Zdroj: http://en.wikipedia.org/wiki/Painter's_algorithm
Přednáška 9
Počítačová grafika, PV, UPCE-KID, [2010/2011]
29
Testování překrývání dvou ploch z P2_ZMIN P1_ZMAX
P1 průmětna xy
Test 2: Plochy se na průmětně nepřekrývají. Nezáleží na pořadí vykreslování. Lze považovat P1 za vzdálenější.
z P2
P1 průmětna xy
Test 3: Pokud jsou všechny vrcholy, určující plochu P1 pod rovinou definovanou pomocí plochy P2, potom je P1 vzdálenější.
z P2 P1 průmětna xy
z
Test 4: Pokud jsou všechny vrcholy, určující plochu P2 nad rovinou definovanou pomocí plochy P1, potom je P1 vzdálenější.
P2
Přednáška 9
30
Warnockův algoritmus
Test 1: Pokud P1_ZMAX
P2
Počítačová grafika, PV, UPCE-KID, [2010/2011]
P1
!!!Tyto čtyři testy neřeší některé složitější polohy dvou ploch!!!
Řeší viditelnost v průmětně. Postup (začíná se celou obrazovkou, nebo oknem): 1. Pokud do okna nezasahuje žádná plocha je barva okna vyplněna pozadím. 2. Pokud do okna zasahuje jen jedna plocha, je v rámci okna tato plocha vykreslena. 3. Pokud do okna zasahuje více ploch, přičemž nejbližší z nich překrývá celé okno, je v rámci okna tato plocha vykreslena. 4. Pokud do okna zasahuje více ploch a nelze jednoduše určit viditelnost, je dané okno rozděleno na 4 části a uvedené body jsou rekurzivně aplikovány na takto nově vytvořené oblasti. 5. Rekurzivní algoritmus končí určením viditelnosti dané oblasti (v nejhorším případě o velikosti 1 pixel, kdy jde vždy určit viditelnost).
průmětna xy Počítačová grafika, PV, UPCE-KID, [2010/2011]
Přednáška 9
31
Počítačová grafika, PV, UPCE-KID, [2010/2011]
Přednáška 9
32
Varianty algoritmu Varianta 1: Do okna nezasahuje žádná vykreslovaná plocha
Freeman-Loutrelův algoritmus Varianta 4: Okno je nutno dále dělit na 4 menší podokna.
Varianta 2: Do okna zasahuje pouze jedna plocha.
Počítačová grafika, PV, UPCE-KID, [2010/2011]
Varianta 3: Do okna zasahuje více ploch, ale nejbližší ho zcela překrývá.
Přednáška 9
33
Rastrové algoritmy
Řeší viditelnost v 3D prostoru Na základě normál jednotlivých stěn a úhlu svíraného se směrem promítání se dělí stěny na přední (potenciálně viditelné) a zadní (neviditelné). Dalším krokem se určí viditelnost hran podle náležitosti k přední, resp. zadní stěně. U nekonvexních těles se v třetím kroku řeší viditelnost potenciálně viditelných hran (jejich možné zakrytí jinou stěnou).
Počítačová grafika, PV, UPCE-KID, [2010/2011]
Přednáška 9
34
Přednáška 9
36
z-buffer algoritmus
Hloubkový algoritmus (z-buffer algoritmus)
větší nárok na paměť
každou zobrazovanou plochu rozloží na pixely
pro obarvení daného pixelu [x,y] v zobrazovaném okně je ze všech pixelů se stejnou souřadnicí [x,y] (vzniklých rozkladem jednotlivých ploch) vybrán pixel s nejmenší hloubkou (vzdáleností od pozorovatele) Algoritmus řádkového rozkladu (scan-line z-buffer alg.)
menší nárok na paměť
rozklad probíhá postupně po řádcích pro všechny zobrazované plochy
pro zobrazení se opět použije barva nejbližšího pixelu Zdroj:http://commons.wikimedia.org/wiki/File:Z-buffer.svg
Počítačová grafika, PV, UPCE-KID, [2010/2011]
Přednáška 9
35
Počítačová grafika, PV, UPCE-KID, [2010/2011]