Reprezentácia telies a priestorových dát
Reprezentácia 3D objektov Trojrozmerný objekt, s ktorým pracujeme, musíme mať v počítači nejakým spôsobom uložený, t.j. reprezentovaný. Môžeme to urobiť niekoľkými spôsobmi: 1. Analytická reprezentácia je matematické vyjadrenie daného objektu. Môže to byť funkčný predpis, parametrické alebo implicitné vyjadrenie. 2. Povrchová reprezentácia pracuje len s povrchom objektu, ktorý môže byť daný analyticky alebo aproximovaný pomocou bodov, úsečiek alebo polygónov. 3. Objemová reprezentácia uchováva celý objem telesa, teda informácie o všetkých bodoch priestoru, ktoré objekt zaberá. 4. Logická reprezentácia ukladá informácie o tom, akým spôsobom bol daný objekt vytvorený z nejakých jednoduchších útvarov (skladaním, prienikom, rozdielom, rotáciou atď.)
Analytická reprezentácia 1. Funkčný predpis z=sin(x+y2) F(x,y,z)= cos(x)cos(y)cos(z) 2. Parametrické vyjadrenie x=r.cos.sin y=r.sin.sin z=r.cos 3. Implicitné vyjadrenie x2+y2+z2-r2=0
Povrchová reprezentácia V tomto prípade je každé teleso reprezentované len svojím povrchom, čo je v mnohých prípadoch úplne postačujúce. Povrch telesa môže byť daný dvomi základnými spôsobmi: analyticky t.j. presne pomocou nejakej aproximácie - môžeme napr. nahradiť zakrivené časti povrchu rovinnými plôškami v tvare mnohouholníka Analytické vyjadrenie je presnejšie a jednoduchšie na uchovávanie, aproximácia je však rýchlejšia. V praxi sa preto často vyskytujú aj prípady, keď je povrch uchovávaný v analytickej forme, ale pri zobrazovaní sa prevedie na plôškovú reprezentáciu.
Povrchová reprezentácia 1. Reprezentácia pomocou vrcholov V tomto prípade reprezentujeme povrch telesa len pomocou množiny bodov, ktoré sa na povrchu nachádzajú. Je to najjednoduchšia reprezentácia. Body okrem svojich súradníc môžu obsahovať aj nejakú dodatočnú informáciu, napr. farbu, normálu v danom bode a podobne.
Povrchová reprezentácia 1. Reprezentácia pomocou hrán Povrch telesa je daný vrcholmi (t.j. bodmi, ktoré patria povrchu), a hranami (úsečkami), ktoré tieto vrcholy spájajú. Takáto reprezentácia sa nazýva aj drôtený model (wireframe) Vrcholy aj hrany môžu mať aj v tomto prípade nejakú ďalšiu informáciu okrem súradníc.
Povrchová reprezentácia Jednoduchý drôtený model, ktorý neobsahuje žiadne dodatočné informácie, sa v počítači ukladá jednoducho: Uložíme tabuľku všetkých vrcholov Vytvoríme tabuľku hrán tak, že v každom riadku budú ukazovatele na dva vrcholy z tabuľky vrcholov Príklad: Drôtený model štvorstena: (0,0,0) (50,0,0) (25,25,0) (25,13,30) Tabuľka vrcholov: 0 0 0 50 0 0 25 25 0 25 13 30 Tabuľka hrán: 1 2 2 3 3 1 1 4 2 4 3 4
Povrchová reprezentácia Drôtený model je veľmi jednoduchá reprezentácia, a preto môže byť často nejednoznačný (rovnako ako bodová reprezentácia).
Povrchová reprezentácia 3. Plôšková reprezentácia Pri tejto reprezentácii je povrch objektu reprezentovaný plôškami, najčastejšie rovinnými plôškami v tvare mnohouholníka. Aj v tomto prípade môžu plôšky niesť aj dodatočné informácie potrebné pri zobrazovaní objektu (farba, normála, materiál...)
Povrchová reprezentácia Jednoduchá plôšková reprezentácia funguje na nasledujúcom princípe: Uložíme tabuľku vrcholov Vytvoríme tabuľku hrán Vytvoríme tabuľku plôšok tak, že v každom riadku budú ukazovatele na vrcholy, ktoré danú plôšku tvoria. Príklad: Plôšková reprezentácia štvorstena: (0,0,0) (50,0,0) (25,25,0) (25,13,30) Tabuľka vrcholov: 0 0 0 50 0 0 25 25 0 25 13 30 Tabuľka hrán: 1 2 2 3 3 1 1 4 2 4 3 4 Tabuľka plôšok: 1 2 3 2 3 4 3 1 4 1 2 4
Povrchová reprezentácia Štrukturovaná povrchová reprezentácia Ide o komplexnú plôškovú reprezentáciu, ktorú navrhol Bruce Baumgart, a ktorá umožňuje odvodiť aj rôzne topologické údaje o danom povrchu. Základom sú opäť tri štruktúry – tabuľka vrcholov, tabuľka hrán a tabuľka plôšok. Najzložitejšia je tabuľka hrán, ktorá pracuje so štruktúrou nazývanou okrídlená hrana (winged egde). Okrídlená hrana uchováva o hrane tieto údaje: vrcholy hrany plôšky susediace s hranou sprava a zľava P1 a P2 hrany nasledujúce za danou hranou v plôškach P1 a P2 (H2, H3) hrany predchádzajúce danej hrane v plôškach P1 a P2 (H4, H5) V1 V2 H1 H2 H5 H3 H4 P1 P2
Povrchová reprezentácia Okrem tabuľky okrídlených hrán potrebujeme na popis povrchu ešte ďalšie dve tabuľky: tabuľku vrcholov so súradnicami všetkých vrcholov tabuľku plôšok, kde je pre každú plôšku uložená niektorá jej hrana Zo štrukturovanej plôškovej reprezentácie možno priamočiaro odvodiť mnohé topologické vzťahy, napr. vrcholy a hrany každej steny plôšky priľahlé k danej hrane plôšky susediace s danou plôškou plôšky stýkajúce sa v jednom vrchole hrany stýkajúce sa v jednom vrchole atď.
Povrchová reprezentácia Príklad: Štrukturovaná plôšková reprezentácia štvorstena: Tabuľka vrcholov: V1: 0 0 0 V2: 50 0 0 V3: 25 25 0 V4: 25 13 30 Tabuľka plôšok: P1: h1 P2: h2 P3: h3 P4: h4 V1 V2 V3 V4 h1 h2 h3 h4 h5 h6 P1 P2 P3 P4 Tabuľka okrídlených hrán vrcholy plôšky následník predch. hrana Ľ P h1 V1 V2 P4 P1 h6 h2 h4 h3 V3 P2 h5 P3 V4
Povrchová reprezentácia Pri uvedenom spôsobe štrukturovanej plôškovej reprezentácie môžeme mať problémy s orientáciou hrán – jedna hrana patrí dvom plôškam a rozdiel je len v smere, ktorým po danej hrane prechádzame, až ten jednoznačne určuje, ktorú plôšku hrana predstavuje. Tento problém sa môže riešiť napr. uložením orientácie v tabuľke plôšok alebo pomocou tzv. polohrán. Polohrana je orientovaná časť hrany (vo väčšine prípadov polovica), ktorá prislúcha len k jednej z dvojice plôšok, ktoré s hranou susedia. Doplnková polohrana potom určuje druhú plôšku. V1 V2 H1 H2 H5 H3 H4 P1:hrana H1 smer V1V2 P2:hrana H1 smer V2V1 V1 V2 H1 H2 H5 H3 H4 P1 P2
Objemová reprezentácia Pri objemovej reprezentácii ide o popísanie celého 3D priestoru, v ktorom sa zobrazovaný objekt (scéna, dáta) nachádza. Základnou jednotkou trojrozmerného priestoru v počítačovej grafike je voxel (volume element), ktorý predstavuje jeden obrazový bod 3D obrazu. Objemová reprezentácia teda uchováva informácie o každom voxeli uvažovaného 3D priestoru. Obraz (alebo jeho časti) môžu byť opäť opísané rôznymi spôsobmi: analyticky informáciami uloženými pre každý voxel informáciami uloženými pre skupiny voxelov F(x,y,z)= cos(x)cos(y)cos(z)
Objemová reprezentácia Oktálový strom (octree) Ak chceme opísať celý objem nejakého objektu, môžeme to urobiť tak, že uložíme informáciu pre každý voxel, ktorý daný objekt zaberá. To je však pamäťovo náročné a pomalé. V objektoch sa často nachádzajú homogénne časti väčšie ako jeden voxel. Ak to tak je, môžeme to využiť tak, že budeme uchovávať informácie o celých skupinách voxelov. Oktálový strom je štruktúra, ktorú dostaneme postupným rekurzívnym delením priestoru na osem častí.
Objemová reprezentácia Príklad: Reprezentácia jednoduchého telese pomocou octree Teleso na obrázku reprezentujeme pomocou octree tak, že budeme sledovať zaplnenosť jednotlivých častí priestoru. 1 2 4 5 6 7 8
Objemová reprezentácia Príklad: Octree s farbou Ten istý objekt skúsime reprezentovať tak, že bude obsahovať aj informáciu o farbe jednotlivých častí.
Objemová reprezentácia Uloženie octree v pamäti Octree môžeme uložiť ako lineárny zoznam, v ktorom budeme mať tri typy hodnôt: F = plná časť (full) V = prázdna časť (void) M = zmiešaná časť (mixed) Postupujeme z horných úrovní na nižšie a každé M nahradíme jeho bližšou špecifikáciou v zátvorkách: 1. krok: M 2. krok: (FFFFMVFF) 3. krok: (FFFF(VVFMVVVV)VFF) 4. krok: (FFFF(VVF(VVFVVVFV)VVVV)VFF)
Logická reprezentácia Pri tejto reprezentácii popisujeme objekty tak, že ukladáme spôsob, akým ich možno dostať pomocou nejakých jednoduchších objektov a základných operácií. Tieto operácie môžu byť logické – zjednotenie, prienik, rozdiel transformačné – posun, rotácia, škálovanie... šablónovacie – posúvanie 2D obrysov pozdĺž 3D kriviek, čím vznikajú rôzne rotačné telesá, priamkové plochy a pod.
Logická reprezentácia 1. Konštruktívna geometria telies Pri konštruktívnej geometrii telies (Constructive Solid Geometry, CSG) uvažujeme niekoľko základných telies, z ktorých potom skladáme výsledný objekt. Na to používame transformácie a logické operácie. Základné telesá (nazývané aj CSG primitívy) sú tieto objekty: kváder guľa valec (môže byť aj nekonečná valcová plocha bez podstáv) kužeľ (všeobecne to môže byť aj zrezaný kužeľ) polpriestor – nie je to teleso, ale pre konštrukciu telies je veľmi užitočný, umožňuje napr. orezávať alebo pomocou prienikov vytvárať rôzne telesá s rovinnými hranicami. toroid (anuloid) – je to prstenec s kruhovým prierezom, v geometrii nie veľmi bežný, ale v technickej praxi veľmi užitočný (potrubia, rúrky...)
Logická reprezentácia Príklad: Zostrojenie jednoduchého telesa pomocou CSG primitív Na toto teleso potrebujeme 4 základné telesá: Zostrojíme CSG strom: posun posun, rotácia zjednotenie
Logická reprezentácia 2. Šablónovanie (sweeping, extrusion) Ide o proces, keď 3D objekt získavame pohybom 2D objektu pozdĺž nejakej krivky. Rozlišujeme tri typy šablónovania: translačné šablónovanie – hýbeme sa pozdĺž úsečky rotačné šablónovanie – hýbeme sa pozdĺž kružnice obecné šablónovanie – pohybujeme sa pozdĺž ľubovoľnej krivky
Logická reprezentácia 1. Translačné šablónovanie V tomto prípade posúvame všetky body 2D objektu v smere vektora v=(vx,vy,vz). Posúvaním jedného bodu (x,y,z) dostaneme úsečku (polpriamku, priamku). Parametrické vyjadrenie tejto úsečky je: x’=x+tvx y’=y+tvy z’=z+tvz v
Logická reprezentácia Priamkové plochy Ak posúvame body 2D krivky v smere jedného vektora, ako sme si to práve ukázali, výsledkom bude priamková plocha, teda plocha, kde každým bodom prechádza priamka, ktorá celá leží v danej ploche. Priamkovú plochu však môžeme dostať aj tak, že každý bod posúvame v smere iného vektora. Každá priamka je potom parametricky daná takto: x’=x+tvx(x,y,z) y’=y+tvy(x,y,z) z’=z+tvz(x,y,z) v2 v1
Logická reprezentácia 2. Rotačné šablónovanie Pri tomto type šablónovania otáčame 2D objekt okolo nejakej osi. Výsledkom bude útvar, ktorého každý rez kolmý na os otáčania bude tvoriť kružnica (prípadne sústredné kružnice alebo kružnicový prstenec, alebo ich časti). Prepokladajme, že rotujeme profil okolo osi z. Nech je parameter z intervalu <0,2>. Potom bod profilu (x,y,z) otáčame takto: x’=x.cos-y.sin y’=x.sin+y.cos z’=z Otočenie okolo ľubovoľnej osi dostaneme zložením posunutia a rotácie okolo dvoch z troch súradnicových osí.