Sisältö. Luento 6: Piilopinnat. Peruskäsitteet (jatkuu) Peruskäsitteitä. Yksinkertaisia tapauksia. Yksinkertaiset tapaukset jatkuu

Samankaltaiset tiedostot
Luento 6: Piilopinnat ja Näkyvyys

Luento 6: Tulostusprimitiivien toteutus

Luento 3: Tulostusprimitiivien toteutus

Avaruuden kolme sellaista pistettä, jotka eivät sijaitse samalla suoralla, määräävät

Yhtälöryhmä matriisimuodossa. MS-A0004/A0006 Matriisilaskenta. Tarkastellaan esimerkkinä lineaarista yhtälöparia. 2x1 x 2 = 1 x 1 + x 2 = 5.

Tampereen yliopisto Tietokonegrafiikka 2013 Tietojenkäsittelytiede Harjoitus

Luento 7: Lokaalit valaistusmallit

Tekijä Pitkä matematiikka

Suorat ja tasot, L6. Suuntajana. Suora xy-tasossa. Suora xyzkoordinaatistossa. Taso xyzkoordinaatistossa. Tason koordinaattimuotoinen yhtälö.

6.5. Renderöintijärjestys

Luento 2: 2D Katselu. Sisältö

Taso 1/5 Sisältö ESITIEDOT: vektori, koordinaatistot, piste, suora

Yhtälöryhmä matriisimuodossa. MS-A0007 Matriisilaskenta. Tarkastellaan esimerkkinä lineaarista yhtälöparia. 2x1 x 2 = 1 x 1 + x 2 = 5.

Algoritmit 1. Luento 10 Ke Timo Männikkö

Luento 2: Viivan toteutus

Luento 3: 3D katselu. Sisältö

Luento 2: Tulostusprimitiivit

TASON YHTÄLÖT. Tason esitystapoja ovat: vektoriyhtälö, parametriesitys (2 parametria), normaalimuotoinen yhtälö ja koordinaattiyhtälö.

Taso. Hannu Lehto. Lahden Lyseon lukio

2 Pistejoukko koordinaatistossa

Suorien ja tasojen geometriaa Suorien ja tasojen yhtälöt

Luku 6: Grafiikka. 2D-grafiikka 3D-liukuhihna Epäsuora valaistus Laskostuminen Mobiililaitteet Sisätilat Ulkotilat

Algoritmit 1. Luento 10 Ke Timo Männikkö

Tekijä Pitkä matematiikka Pisteen (x, y) etäisyys pisteestä (0, 2) on ( x 0) Pisteen (x, y) etäisyys x-akselista, eli suorasta y = 0 on y.

y=-3x+2 y=2x-3 y=3x+2 x = = 6

Luento 3: 2D Katselu. Sisältö

Algoritmit 1. Luento 9 Ti Timo Männikkö

Tekijä Pitkä matematiikka Suoran pisteitä ovat esimerkiksi ( 5, 2), ( 2,1), (1, 0), (4, 1) ja ( 11, 4).

4. Esittäminen ja visualisointi (renderöinti)

Yhtälön oikealla puolella on säteen neliö, joten r. = 5 eli r = ± 5. Koska säde on positiivinen, niin r = 5.

Luento 7: 3D katselu. Sisältö

Datatähti 2019 loppu

BM20A5800 Funktiot, lineaarialgebra ja vektorit Harjoitus 4, Syksy 2016

Juuri 4 Tehtävien ratkaisut Kustannusosakeyhtiö Otava päivitetty Kertaus. b) B = (3, 0, 5) K2. ( )

Suora 1/5 Sisältö ESITIEDOT: vektori, koordinaatistot, piste

T Vuorovaikutteinen tietokonegrafiikka Tentti

Kombinatorinen optimointi

Algoritmit 2. Luento 8 To Timo Männikkö

2.2 Gaussin eliminaatio. 2.2 Gaussin eliminaatio. 2.2 Gaussin eliminaatio. 2.2 Gaussin eliminaatio

Vanhoja koetehtäviä. Analyyttinen geometria 2016

Tarkennamme geneeristä painamiskorotusalgoritmia

Monikulmiot 1/5 Sisältö ESITIEDOT: kolmio

Yleistä vektoreista GeoGebralla

Ympyrä 1/6 Sisältö ESITIEDOT: käyrä, kulma, piste, suora

Diplomi-insinööri- ja arkkitehtikoulutuksen yhteisvalinta 2017 Insinöörivalinnan matematiikan koe , Ratkaisut (Sarja A)

Tietorakenteet ja algoritmit

10. Esitys ja kuvaus

A-osio. Tehdään ilman laskinta ja taulukkokirjaa! Valitse tehtävistä A1-A3 kaksi ja vastaa niihin. Maksimissaan tunti aikaa suorittaa A-osiota.

Lineaarialgebra ja matriisilaskenta II Syksy 2009 Laskuharjoitus 1 ( ) Ratkaisuehdotuksia Vesa Ala-Mattila

Laudatur 4 MAA4 ratkaisut kertausharjoituksiin

MAB3 - Harjoitustehtävien ratkaisut:

Riemannin pintojen visualisoinnista

Ratkaisu: a) Kahden joukon yhdisteseen poimitaan kaikki alkiot jotka ovat jommassakummassa joukossa (eikä mitään muuta).

Johdatus verkkoteoriaan 4. luento

Algoritmit 1. Luento 11 Ti Timo Männikkö

Juuri 4 Tehtävien ratkaisut Kustannusosakeyhtiö Otava päivitetty Kertaus. b) B = (3, 0, 5) K2. 8 ( 1)

, on säännöllinen 2-ulotteinen pinta. Määrää T x0 pisteessä x 0 = (0, 1, 1).

Algoritmit 2. Luento 2 Ke Timo Männikkö

Sisältö. Luento 2: Tulostusprimitiivien toteutus GRAAFISTEN PRIMITIIVIEN TOTEUTUS. Piirtäminen rasteriruudulle. Suoran viivan vaatimukset

5.3 Suoran ja toisen asteen käyrän yhteiset pisteet

MS-A0003/A0005 Matriisilaskenta Laskuharjoitus 2 / vko 45

RATKAISUT a + b 2c = a + b 2 ab = ( a ) 2 2 ab + ( b ) 2 = ( a b ) 2 > 0, koska a b oletuksen perusteella. Väite on todistettu.

Ota tämä paperi mukaan, merkkaa siihen omat vastauksesi ja tarkista oikeat vastaukset klo 11:30 jälkeen osoitteesta

Pyramidi 4 Analyyttinen geometria tehtävien ratkaisut sivu 180 Päivitetty Pyramidi 4 Luku Ensimmäinen julkaistu versio

Algoritmit 2. Luento 2 To Timo Männikkö

Luento 6: Geometrinen mallinnus

Solmu 3/2001 Solmu 3/2001. Kevään 2001 ylioppilaskirjoitusten pitkän matematiikan kokeessa oli seuraava tehtävä:

Kaupunkisuunnittelua

Suorista ja tasoista LaMa 1 syksyllä 2009

Tekijä Pitkä matematiikka b) Kuvasta nähdään, että b = i 4 j. c) Käytetään a- ja b-kohtien tuloksia ja muokataan lauseketta.

Mat Lineaarinen ohjelmointi

Peilaus pisteen ja suoran suhteen Pythonin Turtle moduulilla

1 Ensimmäisen asteen polynomifunktio

Lauseen erikoistapaus on ollut kevään 2001 ylioppilaskirjoitusten pitkän matematiikan kokeessa seuraavassa muodossa:

4.5 Kaksivaiheinen menetelmä simplex algoritmin alustukseen

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen

MS-A0003/A0005 Matriisilaskenta Laskuharjoitus 2 / vko 45

Paraabeli suuntaisia suoria.

Talousmatematiikan perusteet: Luento 12. Lineaarinen optimointitehtävä Graafinen ratkaisu Ratkaisu Excel Solverilla

Kanta ja Kannan-vaihto

Ohjelmoinnin peruskurssi Y1

Osoita, että kaikki paraabelit ovat yhdenmuotoisia etsimällä skaalauskuvaus, joka vie paraabelin y = ax 2 paraabelille y = bx 2. VASTAUS: , b = 2 2

Suora. Määritelmä. Oletetaan, että n = 2 tai n = 3. Avaruuden R n suora on joukko. { p + t v t R},

1 Kertaus. Lineaarinen optimointitehtävä on muotoa:

GEOMETRIA MAA3 Geometrian perusobjekteja ja suureita

Algoritmit 1. Luento 12 Ti Timo Männikkö

Algoritmit 2. Luento 14 Ke Timo Männikkö

Digitaalitekniikan matematiikka Luku 5 Sivu 1 (22) Lausekkeiden sieventäminen F C F = B + A C. Espresso F = A (A + B) = A A + A B = A B

Algoritmit 1. Luento 12 Ke Timo Männikkö


Ympyrän yhtälö

T : Max-flow / min-cut -ongelmat

Vektorit, suorat ja tasot

Tietokonegrafiikka. Jyry Suvilehto T Johdatus tietoliikenteeseen ja multimediatekniikkaan kevät 2014

Numeeriset menetelmät

Transkriptio:

Tietokonegrafiikka / perusteet T-111.300/301 4 ov / 2 ov Peruskäsitteitä Z-buffer Syvyyslajittelu Juovalajittelu Rekursiivinen aluejako Piiloviivat Sisältö Luento 6: Piilopinnat Marko Myllymaa 09/03 Piilopinnat / 1 Piilopinnat / 2 Peruskäsitteitä piiloviiva-algoritmi etsii viivakuvasta peittävien pintojen taakse jäävät viivojen osat ja poistaa ne tai piirtää ne vaimennettuina, esim. katkoviivoina. piilo-algoritmi piirtää sävytetystä kuvasta vain katselupisteeseen näkyvät pintojen osat ja eliminoi peittyvät pinnat tai piirtää ne vaimennettuina, jos peittävät pinnat ovat läpikuultavia. Algoritmi voi toteutua rasterikuvan juovakonversion yhteydessä (kuva-avaruudessa) tai olla erillinen vaihe, joka ainoastaan jakaa mallin (joko 2-ulotteisena projektiona tai 3-ulotteisessa objekti-avaruudessa) näkyviin ja peittyviin osiin. Peruskäsitteet (jatkuu) Kaikki menetelmät toteuttavat tavalla tai toisella pistekohtaisen syvyysvertailun (vain lähin piste piirretään). Lajittelemalla kuvamateriaalia voidaan hyödyntää koherenssia ja vähentää vertailujen määrää (piirretään saman vertailun tuloksena laajempia alueita kuin pikseleitä). Seuraavissa algoritmeissa oletetaan käsiteltävän mallin koostuvan tasomaisista monikulmioista (mallit usein vaikkakaan eivät aina sulkeutuvia monitahokaspintoja). Muun tyyppiset mallit voidaan joko muuntaa monikulmiomalleiksi tai käyttää ko. malleille spesifisiä algoritmeja. Piilopinnat / 3 Piilopinnat / 4 Yksinkertaisia tapauksia pelkkiä viivoja sisältävälle ns. rautalankamallille ei aitoa piiloviiva-algoritmia voi toteuttaa, koska mallissa ei ole peittäviä pintoja.tämä voidaan osittain korjata ns. halo-algoritmilla, jossa kullekin viivalle oletetaan sopivan levyinen, taemmas jääviä viivoja peittävä "sädekehä". Sopivalla leveyden valinnalla saadaan varsin havainnollisia kuvia. Yksinkertaiset tapaukset jatkuu n z e > 0 takana n z e < 0 näkyvissä n z e = 0 siluettitaho (näkyy vain viivana) z Nz > 0 Nz < 0 xy konveksin monitahokkaan kukin taho on aina kokonaan näkyvä tai näkymätön. Takapinnalla piilossa oleva taho voidaan tunnistaa vertaamalla sen normaalivektorin n suuntaa (sopimuksen mukaan aina monitahokkaan pinnasta ulospäin) katselusuuntaan osoittavaan vektoriin z e. Huom.1 tavallisesti katselusuunta on z-akseli, jolloin riittää tarkastella normaalin z-komponentin n z etumerkkiä. Huom.2 takatahojen poisto on hyödyllinen esikäsittelyvaihe muille algoritmeille (vähentää tahojen määrän n. puoleen). Huom.3 konveksille monitahokasmallille riittävä, konkaaville ei Piilopinnat / 5 Piilopinnat / 6 1

Syvyyspuskuri (Z-buffer) Piirrettäessä kuvaa merkitään jatkuvasti kuhunkin pikseliin muistiin sekä toistaiseksi lähimmän siihen osuneen kuvapisteen väri että sen etäisyys (z-arvo) katselupisteestä. Helppo toteuttaa: 1. Alustus: for each pixel do begin color[x,y] := background_color; depth[x,y] := max_depth end Z-buffer (jatkuu) z-arvo normalisoidussa katselukoordinaateissa (clipping planes) Vaatii muistia Esim. 340 x 512 pikselin kuvalle, jossa 256 väriä ja syvyysarvoa (väri-indeksi ja z-arvo ilmaistu 8 bitillä), tarvitaan 340 kilotavua. Vastaavasti 1024 x 1024 pikselin kuva, jossa kullekin pikselille on varattu 32-bitin sana (8 bittiä z-arvolle ja kullekin RGB-päävärille), vaatii 4 megatavua. Antialiasointi ja läpinäkyvyys vaativat erikoisjärjestelyjä, esim. ns. A-puskuria 2. Joka objektille (mielivaltaisessa järjestyksessä!) projisointi ja juovamuunnos, minkä yhteydessä kunkin pikselin kohdalla: if z < depth[x,y] then begin color[x,y] := object_color ; depth[x,y] := z end Piilopinnat / 7 Piilopinnat / 8 Syvyyslajittelu (maalarin algoritmi) Lajitellaan pinnat syvyyden (prioriteetin) mukaan ja maalataan ne päällekkäin järjestyksessä takaa eteen, jolloin taaemmat aina peittyvät. Helppo, jos prioriteetit ennalta määrätty muuten periaatteessa vertailtava jokaista a kaikkiin muihin pintoihin (kompleksisuus N 2 ) ja määrättävä prioriteetti syvyyden tai peittävyyden perusteella. Vertailu kannattaa tehdä monessa vaiheessa ja hyödyntää objektien ympäryslaatikoita. Kaksivaiheinen algoritmi: aluksi järjestetään kaikki objektit prioriteettilistaksi suurimman etäisyytensä Z max mukaan. sitten käydään lista läpi kauimmasta objektista (S) alkaen verraten sitä muihin listassa. Jos S ei peitä mitään muuta a, se piirretään näkyviin ja poistetaan listasta, muussa tapauksessa vaihdetaan S ja sen peittämä Q keskenään. Piilopinnat / 9 Vertailussa käydään läpi seuraavat testit (tässä järjestyksessä); jos yksikin toteutuu, ei S voi peittää Q:ta, jolloin järjestys on oikea eikä muita testejä tarvita: 1. ympäryslaatikoiden päällekkäisyys z-suunnassa: jos Z min (S) > Z max (Q), niin S on taempana. 2. ympäryslaatikoiden päällekkäisyys xy-suunnissa: jos X min (S) > X max (Q) tai X min (Q) > X max (S), niin S ei voi peittää Q:ta (syvyydestä riippumatta). z Vastaava testi tehdään myös Y-suunnassa. xy x Piilopinnat / 10 y 3. päällekkäisyys monikulmion sisältävän tason suhteen: a) jos kaikki S:n kulmapisteet Q:n tason takana, tai b) jos kaikki Q:n kulmapisteet S:n tason edessä, niin S ei peitä Q:ta. 4. jos S:n ja Q:n projektioiden (kuvatasolla 2-ulotteisia monikulmioita) leikkaus on tyhjä, ei S voi peittää Q:ta. Esimerkki pinnoista, joiden järjestys joudutaan vaihtamaan Z S' S X 5. ellei mikään eo. testeistä tuota tulosta, valitaan jokin piste ed. kohdassa todetusta päällekkäisestä alueesta. Tämän kummallekin tasolle laskettu etäisyys määrää lopullisen järjestyksen. Piilopinnat / 11 Piilopinnat / 12 2

Huom.1 syvyyslajittelu voi vaatia useampiakin vaihtoja, joten järjestystä listassa kerran vaihtaneet pinnat on merkittävä ja toistettava vertailut vielä näiden suhteen. Z Huom.2 joskus järjestäminen ei onnistu lainkaan (algoritmi joutuu ikuiseen silmukkaan). Tällainen ns. syklinen peittävyys ratkaistaan pilkkomalla pintoja osiin, esim. jakamalla yksi toisen tasolla. Sama joudutaan tekemään, jos pinnat lävistävät toisensa. A B C X ACB ->? ->? Syvyyslajittelu toimii objektiavaruudessa, vaikka vertailu perustuukin kuva-avaruuden koordinaatistoon. Piilopinnat / 13 Piilopinnat / 14 Juovalajittelu (XYP-lajittelu) Muunnetaan monikulmiot pyyhkäisyjuoviksi tavalliseen tapaan lajitellen ensin monikulmiot ja niiden reunajanat y-suunnassa ja sitten kullekin juovalle jäävät monikulmion osat (janat) x- suunnassa. Saadut janat lajitellaan vielä syvyytensä (P) mukaan ja valitaan kuhunkin pikseliin lähimmän janan väri. Tässä siis syvyyslajittelu tehdään kokonaisten 2-ulotteisten monikulmioiden sijasta niiden 1-ulotteisille viipaleille pyyhkäisyjuovilla. Muuten suoritettavat vertailut ovat vastaavanlaisia: kulmiot järjestetään ylimmän kohtansa (Y max ) mukaan. kunkin monikulmion reunajanat järjestetään Y:n suhteen. kullakin juovalla Y s päivitetään aktiivisten monikulmioiden (so. niiden, joille Y min < Y s < Y max ) listaa, ja näistä kustakin vielä aktiivisten reunojen listaa. leikkaamalla pyyhkäisyjuovaa aktiivisilla reunoilla saadaan janoja, jotka järjestetään X-suunnassa. y scan line peittävyys pyyhkäisyjuovalle saatujen janojen kesken ratkaistaan samalla kun viivoja piirretään: A x B S1 D jos janat erillisiä X-suunnassa, ei vertailua tarvita. H E C S2 F Piilopinnat / 15 Piilopinnat / 16 päällekkäisten janojen suhteet saadaan vertaamalla niiden etäisyyksiä kussakin janojen päätepisteessä. jos kunkin osajanan päissä etäisyysssuhteet ovat samat voidaan ko. osajana piirtää. Jos suhteet vastakkaiset (janan päätepisteet eripuolilla toisen monikulmion tasoa), niin pinnat lävistävät toisensa, jolloin leikkauspisteessä osajanat vielä jaetaan ja piirretään erikseen. Huom. laskenta inkrementaalisesti, myös z-koordinaatti mukana: monikulmion tasoyhtälö: Ax + By + Cz + D = 0 > z = (Ax + By + D) / C z(x+1) = z(x) A/C z(y+1) = z(y) B/C kuten Z-puskurillekin, aliasoituminen ongelmana ratkaisu vastaavanlainen (esim. A-puskuri). Piilopinnat / 17 Piilopinnat / 18 3

Rekursiivinen aluejako 1) Tarkastellaan aluksi koko kuvaruutua yhtenä alueena kuva-alueen ja monikulmion mahdolliset suhteet 2) Jos peittävyys on triviaalisti ratkaistavissa, voidaan kuva piirtää sellaisenaan. 3) Muussa tapauksessa jaetaan kuvaruutu pienempiin osiin (esim. neljänneksiin), joissa sama tarkastelu toistetaan. 4) Tarvittaessa jatketaan osiinjakoa rekursiivisesti jopa yhden pikselin kokoisiin alueisiin, kunnes kunkin alueen sisältämä kuva on piirretty. ympäröivä leikkaava sisältyvä ulkopuolinen ympäryslaatikon avulla saadaan helposti selville, onko monikulmio kokonaan sisällä tai varmasti ulkona. Muuten käytetään leikkausalgoritmia hyväksi (Jos monikulmion reuna leikkaa ruudun reunaa, on tuloksena osittainen peittävyys, muuten monikulmio on kokonaan ulkona tai ympäröi ruutua.) Piilopinnat / 19 Piilopinnat / 20 jos ruudun sisällä on enintään yksi monikulmio tai sen osa, on tilanne triviaali, ja ruutu piirretään. jos joku monikulmio P ympäröi ruutua, niin kaikki sitä kauempana olevat (ne, joiden Z min > Z max (P) ruudun sisällä tai nurkissa laskettuna), peittyvät joka tapauksessa ja voidaan hylätä. muussa tapauksessa ruutu jaetaan osiin, samalla siirtäen jo tunnettua informaatiota ( = lista kiinnostavista objekteista) eteenpäin: vain ruutua leikanneita objekteja tutkitaan ruudun osissa - ruutua ympäröivä monikulmio ympäröi myös kaikkia ruudun osia helpoimmin osiinjako tapahtuu binäärisesti (aina neljänneksiin), mutta voidaan tehdä myös esim. jonkin monikulmion nurkan kohdalta, jolloin osiinjakoja saatetaan tarvita vähemmän. Esim. Piilopinnat / 21 Piilopinnat / 22 octree Muut kuin monikulmiomaailmat kaarevat pinnat Piiloviiva-algoritmit Kaikki piilo-algoritmit voidaan muuntaa myös piiloviivoja käsitteleviksi. Esimerkiksi maalarin algoritmissa voidaan piirtää kunkin näkyvissä olevan objektin reunat erottuvalla värillä ja sisäosa taustavärillä (jolloin se peittää taempana olevat reunat). Varsinaiset piiloviiva-algoritmit toimivat objekti-avaruudessa, ts. tuottavat tuloksena ne osat alkuperäisistä viivoista, jotka näkyvät. Periaatteessa joudutaan tutkimaan kunkin viivan näkyvyys vertaamalla sitä kaikkiin pintoihin, ja katkaisemaan viiva, jos vain osa siitä näkyy. Huom. malli voi sisältää myös sellaisia viivoja, jotka eivät ol e minkään pinnan reunoja, vaan irrallaan avaruudessa. Piilopinnat / 23 Piilopinnat / 24 4

Piiloviivat (jatkuu) Eräs alkuperäinen piiloviiva-algoritmi perustuu siihen, että viivat muodostavat verkkoja, joissa kulkien voidaan näkyvyys ratkaista inkrementaalisesti: haetaan aloituspiste, jolle selvitetään ns. peittyvyysindeksi, so. sitä peittävien pintojen lukumäärä. seurataan ratkaistusta pisteestä lähtevää viivaa ja haetaan pisteet, joissa seurattava viiva leikkaa toista viivaa. verrataan leikkauspisteessä viivojen etäisyyksiä: jos tutkittava on taempana, niin sen peittyvyysindeksiä kasvatetaan tai vähennetään yhdellä sen mukaan, meneekö viiva pinnan alle vai tulee sieltä pois. viivoja seurattaessa piirretään samalla näkyviin ne viivan osat, joiden peittyvyysindeksi on nolla. Syvyyslajittelu on tehostava apukeino myös yllä kuvatussa algoritmissa, samoin rekursiivinen aluejako tai XY-lajittelu. Piilopinnat / 25 5