3.4.1 Perspektiiviprojektio

Koko: px
Aloita esitys sivulta:

Download "3.4.1 Perspektiiviprojektio"

Transkriptio

1 40 LUKU 3. KOLMAS ULOTTUVUUS män suorat janat kuvatasolle suoriksi janoiksi tai pisteiksi, eli projektiokuvauksen projektorikäyrät ovat tulevissa sovelluksissa avaruuden R 3 suoria Perspektiiviprojektio Perspektiiviprojektion periaate on esitetty kuvassa Perspektiiviprojektion erikoisuus on se, että kaikki projektorisuorat kulkevat saman avaruuden R 3 pisteen kautta. Tätä pistettä kutsutaan projektiokeskukseksi. Kuvataso sijaitsee projektiokeskuksen etupuolella missä näkymän objektienkin oletetaan sijaitsevan. Oletamme lisäksi ettei projektiokeskus ole kuvatason piste. Näkymän objektien pisteiden projektiot kuvatasolle ovat niitä ja projektiokeskusta yhdistävien suorien leikkauspisteitä kuvatason kanssa. Tämä tekniikka saa aikaan perspektiiviefektin projisoidussa kuvassa. Pisteen projektio voidaan määrätä yhdenmuotoisten kolmioiden avulla, katso kuva Kuvassa on merkitty d:llä objektin pisteen a ja projektiokeskuspisteen p yhdistävän vektorin a p projektion pituutta katselusuuntavektorin suuntaiselle suoralle, ja h:lla pisteen a kohtisuoraa etäisyyttä tästä suorasta. Piste a projisoituu kuvatasolle pisteeksi a, jonka kohtisuora etäisyys katselusuuntasuorasta on h. Nyt on voimassa d d = h h, (3.92) missä d on kuvatason kohtisuora etäisyys projektiokeskuksesta Yhdensuuntaisprojektioiden luokittelu Yhdensuuntaisprojektio tarkoittaa sitä, että projisoivat suorat ovat täysin yhdensuuntaisia, ikäänkuin perspektiiviprojektion projektiokeskus olisi viety äärettömän kauas kuvattavista objekteista. Yhdensuuntaisprojektiot jaetaan ortograafisiin projektioihin ja vinoprojektioihin. Ortograafisissa projektioissa projektiosuorat (jotka siis kaikki ovat samansuuntaisia, suunnan määrää katselusuuntavektori l) kulkevat kohtisuoraan projektiotason läpi. Yksinkertaisimmissa ortografisissa projektioissa oletetaan projektiosuunnaksi jokin koordinaattiakselin suunta ja projektiotasoksi tätä vastaan kohtisuora koordinaattitaso. Tällaisia projektioita käytetään esimerkiksi teknisissä piirroksissa. Arkkitehti asemoi talon päälinjat koordinaattiakselien suuntaiseksi ja piirtää rakennuspiirrustukset kolmesta (tai peräti kuudesta) eri koordinaattiakselin suunnasta, edestä, sivulta ja ylhäältä. Tämä mahdollistaa tarkkojen mittausten tekemisen projisoidusta kuvasta kyseisiä suuntia vastaan kohtisuorista tasoista.

2 3.4. PROJEKTIOKUVAN MUODOSTAMINEN KOLMIULOTTEISESTA NÄKYMÄSTÄ4 piste a piste a projektiokeskus p d h h katselusuuntavektorin suuntainen suora d projektio eli kuvataso Kuva 3.24: Perspektiiviprojektion periaate: d/h = d /h. Aksonometriset projektiot ovat myös ortografisia projektioita. Näissä on se ero edellisiin, että projektiotaso ei välttämättä ole minkään koordinaattitason suuntainen. Erikoitapaus tällaisista projektioista on isometrinen projektio. Siinä projektiotaso muodostaa saman kulman (π/4) kaikkien koordinaattiakselien kanssa. Projektiokuvassa koordinaattiakselit piirtyvät kuvaan siten, että niiden kuvasuorien väliin jää kulma 2π/3. Isometrista projektiota käytetään esimerkiksi rakenteiden suunnittelussa, tavaraluettelojen teknisessä kuvituksessa, patenttiasiakirjojen kuvituksessa ja huonekalujen suunnittelussa. Etuna edelliseen yksinkertaiseen tapaukseen on se, että objektin kolmiulotteisesta muodosta saa käsityksen yhden kuvan perusteella ja koordinaattiakselien suuntaiset etäisyydet ovat samassa mittasuhteessa. Haittana on perspektiivin puuttumisen takia vääristyneen näköinen kuva, eli objekti näyttää takaosastaan suuremmalta kuin etuosastaan. Lisäksi se soveltuu hyvin ainoastaan suorakulmion muotoisten objektien piirtämiseen. Vinoprojektioissa projektiosuorat (jotka kaikki ovat edelleen samansuuntaisia, suunnan määrää katselusuuntavektori l) kulkevat projektiotason läpi vinosti eli kulmassa, joka poikkeaa suorasta kulmasta. Tunnetuimpia vinoprojektioita ovat kavaljeeriprojektio ja kabinettiprojektio. Kavaljeeriprojektiossa projektiosuorat muodostavat kulman π/4 projektiotason kanssa. Tästä aiheutuu se efekti, että projektiotasoa vastaan kohtisuorat janat projisoituvat lopputulokseen janoiksi, jotka ovat yhtä pitkiä kuin alkuperäiset. Kabinettiprojektiossa ne projisoituvat puolta lyhemmiksi janoiksi. Tässä tapauksessa projektiosuorat muodostavat kul-

3 42 LUKU 3. KOLMAS ULOTTUVUUS man arctan(2) 63.4 projektiotason kanssa Synteettinen kamera Jotta voisimme miellyttävällä tavalla parametrisoida kuvanottotapahtuman, otamme käyttöömme niin kutsutun synteettisen kameran. Synteettinen kamera sijoitetaan maailmankoordinaatistoon mieleiseemme paikkaan. Tämä maailmankoordinaatiston piste on samalla perspektiiviprojektion projektiokeskus. Kameran paikan esittämiseksi tarvitsemme kolme parametria eli kyseisen pisteen homogeeniset koordinaatit. Jatkossa esitämme kameran paikan pisteen p = p x p y p z (3.93) avulla, missä p x, p y ja p z ovat kameran paikan x-, y- ja z-koordinaatit. Tämä ei vielä tietenkään riitä määrittämään tarkasti kuvaan projisoituvaa osaa maailmankoordinaatistosta, koska kamera voi osoittaa mielivaltaiseen suuntaan. Kuten jo aiemmin havaitsimme, vaatii objektin suunnistuksen täydellinen määrääminen tarkalleen kolme toisistaan riippumatonta parametria. Tyypillisesti kameran orientaatio määrätään kahden vektorin avulla. Käyttäjä määrää katselusuuntavektorin (englanniksi look vector) l x l = l y l z (3.94) 0 ja yläsuuntavektorin (englanniksi up vector) u = u x u y u z 0, (3.95) joilla on se tulkinta, että kameran paikasta p suuntaan l kulkevan suoran ja näkymän objektien leikkauspisteet kuvautuvat kuvatason keskipisteeksi ja yläsuuntavektorin suunta kuvautuu pystysuoraksi linjaksi kuvatasolle. Yläsuuntavektorilta

4 3.4. PROJEKTIOKUVAN MUODOSTAMINEN KOLMIULOTTEISESTA NÄKYMÄSTÄ43 ei yleensä vaadita, että se olisi kohtisuorassa katselusuuntavektoria vastaan. Riittää kunhan se ja katselusuuntavektori ovat lineaarisesti riippumattomia keskenään. Vaihtoehtoinen ja usein käytetty tapa katselusuunnan määräämiseksi on se, että käyttäjä määrää jonkin maailmankoordinaatiston pisteen l a (englanniksi lookat) esittäen sen homogeenisissa koordinaateissa l a = (l a x,l a y,l a z,) T. (3.96) Vaatimuksen on, että pisteen l a tulee lopputuloksessa projisoitua kuvatason keskipisteeseen. Tästä voimme helposti laskea vastaavan katselusuuntavektorin kaavalla l = l a p = (l a x p x,l a y p y,l a z p z,0) T. (3.97) Tämäkään ei vielä ole riittävän tarkka parametrisointi. Otetaan lisäparametriksi kuvasuhde (englanniksi aspect ratio), eli kuvan leveyden suhde sen korkeuteen. Tämä tarkoittaa sitä, että kuvatasolta rajataan symmetrisesti katselusuunnan ja kuvatason leikkauspisteen suhteen suorakulmion muotoinen kuvaikkuna, jonka leveyden w ja korkeuden h suhde a r = w/h on käyttäjän määrättävissä. Olemme kiinnostuneita ainoastaan tämän kuvaikkunan sisälle projisoituvasta kuvasta. Tämä on täysin analoginen kameran filmiruudun mittasuhteiden kanssa. Jos kuvasuhde on a r =, on kuvaikkuna neliö. Vastaavasti elokuvateatterien letterbox - formaatissa on kuvasuhde a r = 2, tavallisessa televisiokuvassa a r = 4/3 ja nykyaikaisemmissa malleissa a r = 6/9. Lisäksi otetaan käyttöön käsite kuvakulma. Tämä määrää lopputulokseen tulevan perspektiivivääristymän. Periaatteessa voimme valita jomman kumman kahdesta vaihtoehdosta: Leveyssuunnan kuvakulma θ w rajaa ylhäältä projektiosuorien välisen maksimikulman sivusuunnassa ja korkeussuunnan kuvakulma θ h puolestaan korkeussuunnassa. Näitä rajoittaa kuitenkin kuvasuhde a r kaavalla θ w = a r θ h θ h = θ w /a r. (3.98) Käytännössä käyttäjä siis määrää kuvasuhteen a r haluamakseen ja sen jälkeen määrittelee toisen kuvakulmista. Toinen kuvakulma voidaan sen jälkeen laskea edellisen kaavan avulla. Mitä laajempi on annettu kuvakulma, sitä enemmän lopputulokseen tulee perspektiivivääristymää. Kuvakulman valinta on analoginen sen tilanteen kanssa, jossa valokuvaaja valitsee tietyn tyyppisen objektiivin kuvaamista varten. Laajakulmalinssillä kuvakulma on suuri ja lopputuloksessa perspektiivivääristymä on suurta. Teleobjektiivin kuvakulma on hyvin pieni ja perspektiivivääristymä on myös pientä.

5 44 LUKU 3. KOLMAS ULOTTUVUUS Huomautus: Tämän takia on myös vaikeaa arvioida etäisten kohteiden keskinäistä etäisyyttä, jos niitä katsellaan kaukoputkella tai kiikarilla. Kaukoputken tai kiikarin kuvakulma on kapea, joten perspektiiviefekti ei ole voimakas. Synteettisen kameran parametrisointimme on lähes valmis. Lopuksi esitellään vielä kaksi parametriä, joilla ei ole suoraa vastinetta tosimaailmassa. Rajaamme maailmankoordinaatistosta projisointia varten osan, jota rajoittaa kaksi katselusuuntavektoria vastaan kohtisuoraa tasoa. Näitä tasoja kutsutaan etutasoksi ja takatasoksi (englanniksi front/near clipping plane ja back/far clipping plane). Nämä tasot esitetään etäisyyksinä d n ja d f (n-near, f-far) projektiokeskuksesta katselusuuntavektorin suuntaan ja ne rajaavat yhdessä kuvakulmien kanssa rajallisen tilavuuden jonka sisään jäävät objektit synteettinen kameramme näkee. Tämä tilavuus on muodoltaan katkaistu pyramidi (englanniksi frustum), jonka sivutasot muodostavat kulmat θ w /2 ja θ h /2 katselusuuntavektorin v kanssa. Pyramidin pohjataso on takataso ja etutaso puolestaan leikkaa pyramidin kärjen poikki, katso kuva Jos objekti ovat näin määrätyn katkaistun pyramidin ulkopuolella, ei niitä piirretä lainkaan. Jos objekti on sen sisäpuolella, piirretään se kokonaan, ja jos se leikkaa katkaistua pyramidia, piirretään siitä pyramidin sisäpuolelle jäävä osa. Etu- ja takatason käytön syynä on se, ettemme välttämättä halua piirtää liian lähellä tai liian kaukana olevia objekteja. Liian lähellä olevat objektit vääristyvät hyvin voimakkaasti perspektiiviprojektiossa ja ne todennäköisesti peittävät taakseen koko muun näkymän. Lisäksi emme halua piirtää kuvaan kameran takana olevia objekteja, koska tuskin oletamme niiden ilmestyvän kuvaan. Lisäksi perspektiiviprojektiota käytettäessä kameran takana olevat objektit kuvautuisivat ylösalaisin lopputulokseen. Liian kaukana olevia objektejakaan ei kannata piirtää. Kaukana kamerasta oleva objekti saattaa olla mallitettu vaikka useilla tuhansilla monikulmioilla, mutta koko objekti kuvautuu lopputulokseen yhdeksi pikseliksi. Hylkäämällä liian kaukaiset objektit menetämme lopputuloksesta vain vähän yksityiskohtia, mutta samalla saatamme säästää huomattavasti laskutyötä. Vaihtoehtoinen tilanne on se, että näkymässä on hyvin useita tärkeitä kohteita, joista visuaalisen selkeyden vuoksi piirrämme näkyviin vain tietyllä etäisyysvälillä olevat kohteet. Jotkin kameramallit ovat vielä tätäkin monipuolisempia. Niissä voi esimerkiksi määritellä etäisyyden johon kameran linssi on tarkennettu. Objektit piirtyvät kuvaan terävinä vain jos niiden etäisyys on hyvin lähellä tätä. Tätä etäisyyttä lähempänä ja kauempana olevat objektit piirtyvät kuvaan sumeutuneena, aivan kuten oikella kameralla kuvattaessa. Esittämämme synteettinen kamera tarkentuu samanaikaisesti kaikille etäisyyksille.

6 3.4. PROJEKTIOKUVAN MUODOSTAMINEN KOLMIULOTTEISESTA NÄKYMÄSTÄ45 Kuva 3.25: Katkaistu pyramidi rajaa maailmankoordinaatistosta sen tilavuuden jonka sisäpuoli projisoidaan perspektiiviprojektiolla kuvatasolle.

7 46 LUKU 3. KOLMAS ULOTTUVUUS Synteettisen kameran mallimme avulla voimme muodostaa sekä perspektiiviprojisoituja kuvia, että yhdensuuntaisprojisoituja kuvia. Ortografisen projektion tapauksessa maailmankoordinaatistosta rajataan suorakulmaisen särmiön muotoinen tilavuus, joka määrätään edellisten kameraparametrien avulla muodostetusta katkaistusta pyramidista. Särmiö on suunnattu katselusuuntavektorin (ja samalla siis projektiosuuntien) suuntaisesti. Sen takaseinä on katkaistun pyramidin pohjataso. Sen sivutahkot ovat suorakulmioita, jotka lähtevät pohjatason reunajanoista katselusuuntavektorin suuntaisesti kohti kameran sijaintipaikkaa. Sivutahkot katkaistaan etureunoistaan poikki etutason avulla. Vinoprojektion tapauksessa rajaustilavuus on vääntynyt särmiö. Vinoa yhdensuuntaisprojektiota käsitellään tarkemmin kappaleessa Huomautus: Esitetyssä synteettisen kameran mallissa ei kuvatason tarkkaa paikkaa ole määritelty, olemme vain määritelleet kuvaikkunan mittasuhteet eli kuvasuhteen. Oikeassa kamerassahan valotettava filmi on tarkalleen tietyssä paikassa. Osoittautuu, että kuvatason paikalla ei ole merkitystä. Yhdensuuntaisprojektion tapauksessa lopputulos näyttää samalta oli kuvataso kuinka kaukana tahansa näkymästä objektien etupuolella. Perspektiiviprojektion tapauksessa tilanna tulee olemaan sama, sillä viimeisenä vaiheena objekteille tehdään perspektiivimuunnos, joka kuvaa näkymän rajaavan katkaistun pyramidin näkymää rajaavaksi suorakulmaiseksi särmiöksi venyttäen samalla lähempänä kameraa olevia objekteja suuremmiksi. Varsinainen projisointi tehdään jälleen yhdensuuntaisprojektiona. Yleensä ottaen on luontevaa ajatella kuvatason olevan vaikkapa etutason paikalla. Olemme nyt saaneet parametrisoitua kuvanottotilanteen riittävän monipuolisella tavalla. Periaatteessa voisimme esiteltyjen parametrien avulla määritellä näkymän projektion kuvatasolle. Tämä on kuitenkin varsin teknistä ja monimutkaista. Sekä objektien projisointi, että niiden leikkaaminen näkymää rajaavalla tilavuudella johtaa melko monimutkaisiin lausekkeisiin ja ratkaistaviin yhtälöihin. Pyrimmekin seuraavaksi kuvaamaan näkymän uuteen asemaan ja muotoon, jossa laskenta helpottuu oleellisesti. Tämä tehdään suorittamalla piirrettäville objekteille niin kutsuttu normalisointimuunnos Kanoninen kuvanottotilanne Ajatellaan tilannetta, jossa kamera on sijoitettu maailmankoordinaatiston origoon ( p = (0,0,0,)) siten, että katselusuunta on negatiivisen z-akselin suunta ( l = (0,0,,0) T ), yläsuunta on y-akselin suunta ( u = (0,,0,0) T ), kuvaikkuna on xy-tason neliö jota rajaavat suorat x = ±, y = ±, etu ja takatasot ovat z = 0 ja

8 3.4. PROJEKTIOKUVAN MUODOSTAMINEN KOLMIULOTTEISESTA NÄKYMÄSTÄ47 z = ja projektiotapana käytetään yhdensuuntaisprojektiota. Tällaisessa tapauksessa monikulmioiden leikkaaminen suorakulmaisen särmiön [, ] [, ] [, 0] kanssa on helppoa, käyttäen esimerkiksi Sutherlandin ja Hodgmanin menetelmää. Itse projisointi on vielä helpompaa; riittää ainoastaan unohtaa kärkipisteiden z-koordinaatit. Pyritään seuraavaksi johtamaan geometrisen muunnos, joka kuvaavat kameraparametrein määritetyn tilavuuden maailmankoordinaatistosta edellä mainituksi suorakulmioksi, jota kutsutaan kanoniseksi kuvasärmiöksi. Kyseinen muunnos on nimeltään normalisointimuunnos. Yhdensuuntaisprojektiota käytettäessä normalisointimuunnos muodostuu peräkkäsistä affiineista muunnoksista (siirto, skaalaus, kierto). Perspektiiviprojektion tapauksessa teemme ensin yhdensuuntaisprojektion normalisointimuunnoksen, jonka jälkeen teemme vielä yhden ei-affiinin muunnoksen eli niin kutsutun perspektiivimuunnoksen. Perspektiivimuunnosmatriisi ei kuvaa avaruuden R 4 affiinia aliavaruutta A 4 itselleen. Tämä tarkoittaa sitä, että vaikka samaistammekin maailmankoordinaatiston pisteet aliavaruuden A 4 pisteiksi asettamalla vektorin neljänneksi komponentiksi w =, on perspektiivimuunnoksen jälkeen muunnetun vektorin neljäs komponentti ykkösestä poikkeava. Tämä juuri on perspektiivimuunnoksen ja homogeenisten koordinaattien hienous. Palattaessa takaisin karteesisiin koordinaatteihin tuli tulosvektorin kolme ensimmäistä komponenttia jakaa neljännellä. Perspektiivimuunnosmatriisi muodostaa sellaisen neljännen komponentin, joka loppuvaiheen jakolaskussa venyttää origoa lähellä olevia objekteja täsmälleen oikealla tavalla. Lopputuloksena saamme 4 4-matriisin, joka suoraan kuvaa objektit kameraparametrien määräämästä tilavuudesta kanoniseen kuvasärmiöön. Jos käytämme hierarkista puumallia koostamaan näkymän objektit primitiiviobjekteista, voimme alustaa puuta läpikäydessä muunnosmatriisiksi kohta johdettavan normalisointimuunnosmatriisin. Tuloksena on se, että puun latvasolmujen objektit kuvautuvat suoraan oikeaan asemaan suhteessa kanoniseen kuvasärmiöön, jolloin ne voidaan leikata kuvasärmiöllä ja piirtää näkyviin sitä mukaa kun puuta läpikäydään Normalisointimuunnos ortografista projektiota käytettäessä Olemme siis pystyneet uudelleen muotoilemaan kuvanotto-ongelman: On löydettävä sopiva normalisointimuunnosmatriisi. Johdetaan se vaihe vaiheelta. Kanonisessa tilanteessa kamera sijaitsee koordinaatiston origossa, kun käyttäjän parametrisoimassa asemassa se sijaitsee pisteessä p. Teemmekin ensiksi siirto-operaation, joka siirtää kaikkia näkymän objekteja, mukaanlukien kamera (tämä tosin siirtyy

9 48 LUKU 3. KOLMAS ULOTTUVUUS Kuva 3.26: Normalisointimuunnos: Vaihe, kamera siirretään koordinaatiston origoon siirtomatriisilla T ( p x, p y, p z ), kaikki objektit siirretään samalla siirrolla. implisiittisesti) siten, että piste p siirtyy origoksi. Tämän tekee siirtomatriisi T ( p x, p y, p z ). (3.99) Kun matriisilla (3.99) kerrotaan kaikkien näkymän objektien kärkipisteiden homogeeniset koordinaattivektorit, ja implisiittisesti myös kameran paikan osoittava vektori p, päädymme kuvan 3.25 osoittamasta tilanteesta kuvan 3.26 tilanteeseen. Seuraavassa vaiheessa siirrettyä katkaistua pyramidia kierretään siten, että katselusuuntavektori kiertyy negatiivisen z-akselin suuntaiseksi ja yläsuuntavektorin projektio katselusuuntavektoria vastaan kohtisuoralle tasolle kiertyy positiivisen y-akselin suuntaiseksi. Tämän kierron konstruoimiseksi muodostamme kameran suuntaparametrien l ja u avulla kameraan kiinnitetyn oikeakätisen ortonormaalin suuntavektorikolmikon.

10 3.4. PROJEKTIOKUVAN MUODOSTAMINEN KOLMIULOTTEISESTA NÄKYMÄSTÄ49 Sen ensimmäiseksi vektoriksi n valitsemme katselusuuntavektorin vastavektorin skaalattuna yksikkövektoriksi: n = l l = (n x,n y,n z,0) T (3.00) Seuraavaksi muodostamme yksikkösuuntavektorin v suuntavektorista u. Valitsemme vektoriksi v sen vektorin, joka saadaan ortonormalisoimalla vektori u vektorin n kanssa käyttäen Gramin ja Schmidtin ortonormalisointia: v = u ( u, n) n u ( u, n) n = (v x,v y,v z,0) T. (3.0) Yllä oleva kaava on yhtäpitävä luvussa esitetyn tekniikan kanssa, katso kuva.. Huomaa, ettei vektorin v muodostaminen onnistu, jos katselu- ja yläsuuntavektorit ovat lineaarisesti riippuvia. Ortonormaali vektoripari v, n täydennetään ortonormaaliksi oikeakätiseksi kolmikoksi w, v, n ristitulon avulla. Valitsemme täten w = w x w y w z 0, missä w x v x w y = v y n y. (3.02) w z v z n z Edellä johdettu vektorikolmikko on piirretty näkyviin myös kuviin 3.25 ja Näissä kuvissa on projektiokeskukseen piirretty koordinaatisto, jonka x-, y- ja z-akselit ovat edellä johdettujen vektorien w, v ja n suuntaiset. Haluamme nyt kiertomatriisin, joka kiertää vektorit w, v ja n x-, y- ja z-akselien suuntaisiksi. Kuten jo aiemmin havaitsimme ortonormaalia oikeakätistä suuntavektorikolmikkoa vastaava kiertomatriisi w x v x n x 0 R( w, v, n) = w y v y n y 0 w z v z n z 0 (3.03) kiertää x-, y- ja z-akselien suuntaiset vektorit vektorien w, v ja n suuntaisiksi vektoreiksi, joten matriisi R( w, v, n) tekee täsmälleen käänteisen operaation kuin haluamme. Täten oikea kierto on edellisen transpoosimatriisin tekemä. Kierrämmekin seuraavaksi edellä siirrettyjä kärkipisteitä matriisillä R( w, v, n) T. n x

11 50 LUKU 3. KOLMAS ULOTTUVUUS Kuva 3.27: Normalisointimuunnos: Vaihe 2, edellä siirretyt objektit kierretään matriisilla R( w, v, n) T siten että kameran koordinaatisto yhtyy maailmankoordinaatistoon.

12 3.4. PROJEKTIOKUVAN MUODOSTAMINEN KOLMIULOTTEISESTA NÄKYMÄSTÄ5 taso z= piste (,0, ) z q w pyramidin pohjataso piste (tan( q w /2),0, ) x piste (,0, ) Kuva 3.28: Normalisointimuunnos: Vaiheen 3 skaalausmuunnoksen johtaminen. Tähän mennessä olemme muodostaneet kaksi ensimmäistä vaihetta, ja niitä yhdessä vastaa 4 4-matriisi R( w, v, n) T T ( p x, p y, p z ). (3.04) Jos tätä matriisia sovelletaan näkymän objekteihin alkuperäisessä asemassaan, päädytään kuvan 3.27 tilanteeseen. Kuten huomaamme, on kameraan kiinnitetty koordinaatisto kiertynyt siten, että sen akselit yhtyvät maailmankoordinaatiston akseleihin. Muunnetun näkymän orientaatio on siis jo tässä vaiheessa haluamamme; katselusuunta on negatiivisen z-akselin suunta ja yläsuunta on positiivisen y-akselin suunta. Kuvautunut katkaistu pyramidi on kuitenkin todennäköisesti vielä vääränmuotoinen: Sen pohjataso ei ole välttämättä neliö, eikä se ole tasossa z =. Korjataan tilanne kahdessa vaiheessa. Ensin skaalaamme pyramidia siten, että sen kaikki neljä sivutasoa muodostavat kulman π/4 x- ja y-akselien kanssa. Tämä tehdään xy-tasossa operoivalla skaalausmuunnoksella. Tämän johtamiseksi tarkastellaan kuvaa Se on piirretty edellisen kierron jälkeisestä tilanteesta, kun kuvautunutta pyramidia katsotaan positiivisen y-akselin suunnasta. Tällöin pyramidin y-akselin suuntaiset sivutasot ovat kulmassa θ w toistensa suhteen. Suorakulmaisen kolmion avulla näemme, että nämä sivutasot leikkaavat tasoa z = xz-tason pisteissä (tan(θ w /2),0, ) ja ( tan(θ w /2),0, ). Haluamamme x-

13 52 LUKU 3. KOLMAS ULOTTUVUUS Kuva 3.29: Normalisointimuunnos: ( ( ) Vaihe 3, edellä ) siirretyt ja kierretyt objektit skaalataan matriisilla S cot θw2,cot( θh 2 ),. Katkaistun pyramidin sivujen reunajanat leikkaavat tasoa z = pisteissä (±,±, ). akselin suuntainen skaalauskerroin on täten s x = /tan(θ w /2) = cot(θ w /2). Vastaavalla tavalla havaitsemme, että y-akselin suuntaisen skaalaustermin tulee olla s y = /tan(θ h /2) = cot(θ h /2). Skaalaammekin seuraavaksi siirretyt ja kierretyt objektit skaalausmatriisilla ( S cot ( ) θw,cot 2 ( ) ) θh,. (3.05) 2 Tilanne, johon esitetyillä kolmella muunnoksella päädytään, näkyy kuvassa Huomaa, että pyramidin sivujen reunajanat leikkaavat skaalauksen jälkeen tasoa z = pisteissä (±, ±, ). Tässä vaiheessa katkaistu pyramidi on jo oikeassa asennossa ja oikean muotoinen. Vielä on kuitenkin jäljellä yksi pulma: Pyramidin pohjataso on mitä toden-

14 3.4. PROJEKTIOKUVAN MUODOSTAMINEN KOLMIULOTTEISESTA NÄKYMÄSTÄ53 näköisimmin eri kuin taso z =. Tämä ongelma korjataan toisella skaalauksella, joka saattaa pohjatason halutulle paikalleen. Ensimmäisenä voisi tulla mieleen skaalata ainoastaan z-akselin suunnassa. Tämä olisi kuitenkin virheellinen tapa, sillä se todennäköisesti tuhoaisi edellisen skaalauksen aikaansaaman pyramidin muodonmuutoksen. Skaalaammekin avaruutta samalla skaalauskertoimella kaikkien akselien suunnassa. Kysymys kuuluukin: Mikä on oikea skaalaustermi? Alkuasetelmassa katkaistun pyramidin pohjatason etäisyys katselupisteestä oli d f, sehän on käyttäjän määräämä takataso. Ensimmäisessä siirrossa takatason etäisyys katselupisteestä ei muutu millään tavalla, eikä se muutu myöskään toisen vaiheen kierrossa, koska kierrot eivät muuta pisteiden etäisyyksiä. Kierron jälkeen takataso on xy-tason suuntainen ja se leikkaa negatiivista z-akselia pisteessä z = d f. Kolmannessa vaiheessa skaalasimme xy-tasossa. Tämä muunnos ei vaikuta objektien z-koordinaatteihin, joten takataso on edelleen taso z = d f. Näin ollen oikea skaalaustermi on /d f, ja haluttu neljännen vaiheen skaalausmatriisi on ( S,, ). (3.06) d f d f d f Tämä matriisi kuvaa tason z = d f tasoksi z =, ja koska skaalaus on sama kaikkiin suuntiin, säilyttää se pyramidin edellisessä vaiheessa saadussa muodossa. Tulos on esitetty kuvassa Nyt olemme saaneet valmiiksi normalisointimuunnoksen, jonka avulla voimme piirtää ortografisella projektiolla projisoidun kameraparametrien määräämän kuvan näkymästä. Kokonaismuunnosmatriisi on seuraava: ( ( ) ) N o = S( d f, d f, d f )S cot θw2,cot( θh 2 ), R( w, v, n) T T ( p x, p y, p z ). (3.07) Kuvan rasterointi tehdään vaikka seuraavalla tavalla: Kuvaan piirretään näkyville kaikki monikulmiot tai monikulmioiden palaset, jotka ovat suorakulmion [,] [,] [, d n /d f ] sisällä. Etutaso, jolla poistetaan näkymästä liian lähellä katselupistettä olevat objektit, kuvautuu tasoksi z = d n /d f. Monikulmiot on siis tarvittaessa leikattava leikkaustasoilla x =, x =, y =, y =, z = ja z = d n /d f. Piirtoa varten muodostamme rasterin, jonka pikselien oletetaan tässä neliöiksi. Pikselien lukumäärät n x ja n y valitaan sellaiseksi, että kuvasuhde säilyy haluttuna (tai ainakin hyvin lähellä sitä). Valinta n x = round(a r n y ) on sopiva. Tässä a r on sama kuvasuhde, joka vallitsee kuvakulmien välillä. Piirrettävien monikulmioiden kärkipisteiden pikselikoordinaatit saadaan edellisillä neljäl-

15 54 LUKU 3. KOLMAS ULOTTUVUUS Kuva 3.30: Normalisointimuunnos: Vaihe 4, edellä siirretyt ja kierretyt ja skaalatut objektit skaalataan matriisilla S( d f, d f, d f ). Katkaistun pyramidin pohjataso kuvautuu tasoksi z =.

16 3.4. PROJEKTIOKUVAN MUODOSTAMINEN KOLMIULOTTEISESTA NÄKYMÄSTÄ55 lä muunnoksella kuvatuista kärkipisteiden maailmankoordinaateista yksinkertaisesti unohtamalla z-koordinaatti ja skaalaamalla ja siirtämällä x- ja y-koordinaatit muunnoksilla jotka kuvaavat intervallin [,] esimerkiksi väleiksi [0,n x ] ja [0,n y ]. Sen jälkeen pikselikoordinaatit saadaan pyöristämällä lopputulokset kokonaisluvuiksi. Jatkossa käytämme liukuvan suoran monikulmioiden piirtoalgoritmissa z-puskurimenetelmää näkyvien pintojen määräämiseksi. Sen standarditoteutuksessa z-koordinaatit oletetaan olevan välillä [0, ] siten, että z-arvo kuvaa pisteen etäisyyttä katselupisteestä. Tähän muotoon päästään yksinkertaisimmin vaihtamalla kärkipisteiden z-koordinaatit vastakkaismerkkisiksi Normalisointimuunnos perspektiiviprojektiota käytettäessä Edellä johdettu nelivaiheinen geometrinen muunnos normalisoi näkymän kanoniseen kuvasärmiöön. Se koostui pelkistä affiineista muunnoksista. Perspektiiviprojektion tapauksessa tarvitsemme vielä yhden muunnoksen. Tämän muunnoksen tulisi kuvata matriisin N o kuvaama katkaistu pyramidi suorakulmioksi. Matriisilla N o tehdyn muunnoksen jälkeen pyramidin etutaso kuvautuu tasolle z = k = d n /d f (3.08) neliöksi, jonka kärkipisteet ovat (±k, ±k, k) ja sen takataso kuvautuu neliöksi kärkipisteinään (±, ±, ) tasolla z =. Huomaa, että kaikilla järkevillä etuja takatason etäisyyksillä on voimassa 0 < k <. Haluamme z-puskurimenetelmää varten kuvauksen, joka kuvaa edellä mainitun etutasoneliön xy-tason neliöksi, jonka kärkipisteet ovat (±, ±, 0). Kuvauksen tulisi myös muuntaan takatasoneliö neliöksi kärkipisteinään (±, ±, ), siten, että lähellä takatasoa olevat pisteet kuvautuvat tason z = lähelle ja että z-koordinaatit kuvautuvat monotonisesti. Sopivaksi muunnosmatriisiksi osoittautuu matriisi D = k 0 0. (3.09) k k Tarkastellaan esimerkiksi, kuinka edellinen matriisi kuvaa muutaman matriisilla N o kuvatun katkaistun pyramidin pisteen. Otetaan ensiksi mielivaltainen piste

17 56 LUKU 3. KOLMAS ULOTTUVUUS takatasolta z = k 0 0 k k x y = x y k k x = y. (3.0) Jakamalla lopputulosvektorin kolme ensimmäistä komponenttia neljännellä saamme tulospisteen karteesisiksi koordinaateiksi (x,y,), eli mielivaltainen takatason piste kuvautuu tasolle z = siten, etteivät sen x- ja y-koordinaatit muutu. Tarkastellaan sitten mielivaltaista pistettä tasolla z = k k 0 0 k k x y k = x y k k k k x = y 0, (3.) k eli se kuvautuu tason z = 0 pisteeksi (x/k, y/k, 0). Erityisesti etutasoneliön nurkkapisteet (±k, ±k, k) kuvautuvat tason z = 0 pisteiksi (±, ±, 0), esimerkiksi piste ( k,k, k) (origosta pyramidia kohti katsottaessa tämä on etutasoneliön vasemman yläkulman piste) kuvautuu pisteeksi (,, 0). Jos 0 < k <, on muunnosmatriisi D ei-singulaarinen, joten sillä on käänteismatriisi. Osoittautuu, että D = (3.2) 0 0 k k k Muunnosmatriisia D kutsutaan perspektiivimuunnosmatriisiksi. Se ei tee vielä varsinaista perspektiiviprojektiota. Sen sijaan se kuvaa pisteiden homogeeniset koordinaatit uusiksi homogeenisiksi koordinaateiksi, joissa neljäs komponentti on sellainen, että jaettaessa sillä kolme ensimmäistä koordinaattia kuvautuu pyramidi suorakulmioksi. Varsinainen perspektiiviprojektio tehdään, kun muunnoksen D jälkeen palataan karteesisiin koordinaatteihin ja projisoidaan lopputulos yhdensuuntaisprojektiolla kuten tehtiin edellä. Matriisia ( N p = DN o =DS,, ) ( S cot d f d f d f R( w, v, n) T T ( p x, p y, p z ) ( ) θw,cot 2 ( ) ) θh, 2 (3.3)

18 3.4. PROJEKTIOKUVAN MUODOSTAMINEN KOLMIULOTTEISESTA NÄKYMÄSTÄ57 Kuva 3.3: Normalisointimuunnos: Perspektiivimuunnosmatriisilla kertomisen jälkeen palataan karteesisiin koordinaatteihin ja projisoidaan kuva yhdensuuntaisprojektiolla. Kuvan mittasuhteet palautetaan ennalleen pikselikoordinaatteja laskettaessa. Katkaistu pyramidi näyttää lopputuloksessa suorakulmiolta. kutsutaan normalisointimuunnokseksi perspektiiviprojektiokuvan muodostamiseksi. Lopputuloksena saadaan esimerkissämme pikselikuva 3.3, jossa on lisäksi esitetty kuinka katkaistu pyramidi kuvautuu lopputulokseen suorakulmioksi Normalisointimuunnos vinoa yhdensuuntaisprojektiota käytettäessä Vinon yhdensuuntaisprojektion tapauksessa tarvitsemme yhden lisävälivaiheen edellä esitettyyn tavallisen yhdensuuntaisprojektion nelivaiheiseen normalisointimuunnokseen. Otamme käyttöön uudet kameraparametrit. Näistä kameran paikkaa merkitään kuten edellä homogeenisella koordinaattivektorilla p. Yläsuuntaa merkitään edelleen vektorilla u ja katselusuuntaa vektorilla l, joka yhä voidaan niin halutessamme esittää erotuksena l = l a p, missä l a on jokin sellaisen avaruuden pisteen homogeeninen koordinaattivektori, jonka haluamme projisoituvan kuvan keskelle. Tarvitsemme vielä yhden suuntavektorin v n joka on projektioeli kuvatason normaalivektori (englanniksi view plane normal). Tämän ja katse-

19 58 LUKU 3. KOLMAS ULOTTUVUUS lusuuntavektorin oletamme toteuttavan ( v n, l) > 0, (3.4) mikä tarkoittaa sitä, että projisoitava näkymä sijaitsee kuvatason sillä puolella, johon vektori v n osoittaa. Muunnoksen ensimmäinen vaihe on, kuten aiemminkin, kameran siirtäminen origoon muunnoksella T ( p x, p y, p z ). (3.5) Seuraavaksi kierrämme näkymää ja kameraa. Tällä kertaa kiertomatriisi määrätään siten, että kuvatason normaalivektori kiertyy negatiivisen z-akselin suuntaiseksi ja u-vektorin projektio kuvatasolle kiertyy positiivisen y-akselin suuntaiseksi. Haluamamme kiertomatriisi on R( w, v, n) T, missä kierron parametrisoiva oikeakätinen ortonormaali vektorikolmikko on: n = vn v n, u ( u, n) n v = u ( u, n) n, w = v n. (3.6) Edellisen siirron ja kierron jälkeen katselusuuntavektori l on kuvautunut vektoriksi l : l x l = l y l z0 = R( w, v, n)t T ( p x, p y, p z ) l y l z = R( w, v, n)t l, (3.7) 0 l x jolle on voimassa l z < 0. Tämä johtuu siitä, että vaadimme katselusuuntavektorin l osoittamaan samalle puolelle kuvatasoa kuin sen normaalivektorin v n. Tällä oletuksellä vektori l osoittaa väistämättä xy-tason negatiivisen z-akselin puoleiseen puoliavaruuteen. Teemmekin seuraavaksi vääntöoperaation, joka vääntää vektorin l negatiivisen z-akselin suuntaiseksi. Haluamamme vääntömatriisi on 0 l x/l z 0 V xy ( l x/l z, l y/l z) = 0 l y/l z (3.8) 0 0 0

20 3.4. PROJEKTIOKUVAN MUODOSTAMINEN KOLMIULOTTEISESTA NÄKYMÄSTÄ59 Näemme helposti, että edellinen vääntömatriisi vääntää avaruutta R 3 siten, että vektorin l suunta kuvautuu negatiivisen z-akselin suunnaksi: l x l x l zl x/l z 0 V xy ( l x/l z, l y/l z) l y l z0 = l y l zl y/l z l z = 0 l z. (3.9) 0 0 Edellä esitetyn vääntömatriisin toiminta on havainnollistettu kuvassa Kuvassa 3.32 (a) on esitetty tilanne johon päädytään kun kamera on siirretty origoon (muunnos (3.5)) ja näkymää on kierretty kiertomatriisilla, joka parametrisoidaan vektorikolmikolla (3.6). Väännöllä (3.8) päädytään kuvan 3.32 (b) tilanteeseen, jossa katselusuunta vääntyy negatiivisen z-akselin suuntaan. Tämän jälkeen jatkamme kuten aiemminkin. Ensiksi skaalaamme xy-suunnan skaalauksella ja sen jälkeen skaalauksella S ( cot ( θw 2 ),cot ( θh 2 ), ), (3.20) ( S,, ). (3.2) d f d f d f Vinon yhdensuuntaisprojektion tapauksessa etu- ja takatason etäisyydet tulkitaan etäisyyksinä katselupisteestä kuvatason normaalivektorin suuntaan, katso kuva 3.32 (c) ja muunnosmatriiseissa esiintyvät kuvakulmat tulkitaan kuten kuvassa 3.32 (d). Lopullinen normalisointimuunnosmatriisi käytettäessä vinoa yhdensuuntaisprojektiota on siis ( N v =S,, ) ( S cot d f d f d f R( w, v, n) T T ( p x, p y, p z ), ( ) θw,cot 2 ( ) ) θh, V xy ( l 2 x/l z, l y/l z) (3.22) ja lopullinen pikselikuva rasteroidaan aivan kuin tavallisen yhdensuuntaisprojektion tapauksessa. Erilaisia vinoprojektioita muodostettaessa tulee katselusuuntavektori ja kuvatason normaalivektori valita siten, että niiden väliin muodostuu haluttu kulma. Esimerkiksi valinnat ( v n, l) = cosπ/4 = 2, ja ( v n, l) = cos(arctan2) = 5 (3.23) vastaavat kavaljeeri- ja kabinettiprojektioita.

21 60 LUKU 3. KOLMAS ULOTTUVUUS T vektori l =M l y y T n vektori M v x x z (a) z (b) y df y q w q h dn x x z (c) z (d) Kuva 3.32: Vino yhdensuuntaisprojektio: Kuva (a), kamera on siirretty origoon ja kierto on suoritettu. Kuva (b), tilanne xy väännön jälkeen. Kuva (c), etu ja takatason etäisyydet tulkitaan etäisyyksinä kuvatason normaalin suuntaan. Kuva (d), kuvasärmiön rajaaminen kuvakulmien avulla.

22 3.4. PROJEKTIOKUVAN MUODOSTAMINEN KOLMIULOTTEISESTA NÄKYMÄSTÄ Monikulmioiden leikkaaminen, monikulmioliukuhihna Ennen monikulmioiden varsinaista rasterointia on tapana leikata ne kuvasärmiön kanssa. Jos käytetään yhdensuuntaisprojektiota (vinoa tai tavallista), on leikkaaminen varsin triviaali toimenpide. Se voidaan tehdä yleistämällä Sutherlandin ja Hodgmanin algoritmi kolmeen ulottuvuuteen. Erona aiemmin esiteltyyn tasomonikulmion leikkaamiseen tason suorakulmiolla on nyt se, että leikkaava monikulmio on avaruuden R 3 suorakulmainen särmiö. Leikattava monikulmio on myös määritelty kolmessa ulottuvuudessa, mutta sen oletetaan aina olevan jollakin avaruuden R 3 kaksiulotteisella hypertasolla. Nyt leikkaavia tasoja on kuusi kappaletta: Ne ovat tasot x = ±, y = ±, z = d n /d f ja z =. Menetelmässä tarvitaan tieto siitä onko tutkittava kärkipiste x = (x,x 2,x 3,) T vuorossa olevan leikkaustason sisä-, vai ulkopuolella. Tämä saadaan selville tutkimalla kyseisen tason yhtälölausekkeen etumerkkiä testattavassa kärkipisteessä. Esimerkiksi, jos testaamme pistettä tason x = kanssa, on testattava saako lauseke ( n, x x 0 ) (3.24) positiivisen vai ei-positiivisen arvon. Tässä n on tason x = sellainen normaalisuuntavektori, joka osoittaa ulospäin kanonisesta kuvasärmiöstä (se voi olla esimerkiksi vektori n = (,0,0,0) T ) ja x 0 on jokin piste tasolla x = (esimerkiksi x 0 = (,0,0,) T ). Jos lauseke saa positiivisen arvon, tulkitsemme pisteen olevan ulkopuolella kuvasärmiötä kyseisen tason suhteen. Jos lauseke on ei-positiivinen, tulkitaan piste olevan sisäpuolella. Kun tarvisemme monikulmion kärkipisteitä x i ja x i+ yhdistävän reunajanan ja vuorossa olevan leikkaavan sivutason leikkauspistettä, saamme sen koordinaatit ratkaisemalla parametriarvon t yhtälöstä ( n, x(t) x 0 ) = 0, missä x(t) = ( t) x i +t x i+, (3.25) aivan kuten teimme Cyrusin ja Beckin / Liangin ja Barskyn menetelmässä. Monikulmioiden piirtoliukuhihna käytettäessä hierarkista mallitusta ja yhdensuuntaisprojektiota on siis seuraava: Käyttäjän antamien kameraparametrien avulla muodostetaan (vinoa) yhdensuuntaisprojektiota vastaava (viidestä) neljästä geometrisesta muunnosmatriisista koostuva homogeenisissa koordinaateissa operoiva normalisointimuunnosmatriisi (N = N v ) N = N o. Käydessämme esijärjestyksessä läpi hierarkiamallia kuvaavaa puuta, alustamme efektiiviseksi muunnosmatriisiksi matriisin N. Päädyttyämme latvasolmuun, kerromme primitiiviobjektin monikulmioiden kärkipisteiden homogeeniset mallituskoordinaattivektorit kyseiseen latvasolmuun kumuloituneella 4 4 matriisilla NM M q. Tämä kuvaa primitiiviobjektin piirtoa varten oikeaan asentoon suhteessa kanoniseen kuvasärmiöön

23 62 LUKU 3. KOLMAS ULOTTUVUUS 8 (0,,) 5 (0,0,) 6 (,0,) 4 (0,,0) 3 (,,0) 7 (,,) x y z w Kärkipistelista "paikkatieto" n p p2 p3 p Monikulmiolista "topologiatieto" (0,0,0) 2 (,0,0) Kuva 3.33: Yksikkökuution esittämiseen sopivat tietorakenteet. Paikkatieto erotetaan rakennetiedosta. [,] [,] [, d n /d f ]. Sen jälkeen käymme primitiiviobjektin läpi monikulmio kerrallaan ja leikkaamme vuorossa olevan monikulmion kanonisen kuvasärmiön kanssa (tehokkuussyistä voisi olla hyödyllistä tutkia ensin vaikkapa Cohenin ja Sutherlandin testillä voiko kyseinen monikulmio näkyä lainkaan). Tuloksena saadut kärkipisteet projisoidaan kuvatasolle ja kuvataan sen jälkeen pikselikoordinaatteihin. Leikattu monikulmio rasteroidaan lopuksi liukuvan suoran menetelmällä. Jotta edellä kuvattu menetelmä olisi mahdollisimman tehokas, kannattaa primitiiviobjektit tallettaa latvasolmuihin siten, että yhdessä taulukossa pidetään tallella kärkipisteiden homogeeniset mallituskoordinaatit. Toisessa taulukossa luetellaan monikulmiot indekseinä kärkipistetaulukkoon tiettyä kärkipisteiden kiertojärjestystä noudattaen (esimerkiksi primitiiviobjektia ulkopuolelta katsottaessa sen pintamonikulmoiden kärkipisteet luetellaan vastapäivään kiertäen). Kuvassa 3.33 on esimerkki tämänkaltaisesta tietorakennekokonaisuudesta yksikkökuution esittämiseksi. Kumuloituneella muunnosmatriisilla kerrotaan kärkipistetaulukossa luetellut homogeeniset koordinaattivektorit, ja monikulmiot piirretään monikulmiotaulukon ohjaamana. Jos samaa primitiiviobjektia käytetään mallissa useaan kertaan, on ainakin kaksi vaihtoehtoista toimintatapaa. Primitiiviobjektin tietorakenteista voidaan muodostaa jokaiseen latvasolmuun oma kopionsa tai sitten tultaessa latvasolmuun kopiodaan kärkipistetaulukko työtilaan ja sovelletaan muunnosta kopioon. Muunnetut kärkipisteet sivumonikulmiolle löydetään indeksoimalla kopiota monikulmiotaulukon avulla. Jälkimmäisessä lähestymistavassa on se etu, että muistitilaa säästyy, koska muistissa tarvitsee pitää vain yksi kappa-

24 3.4. PROJEKTIOKUVAN MUODOSTAMINEN KOLMIULOTTEISESTA NÄKYMÄSTÄ63 le kutakin primitiiviobjektia. Haittana on kopioimisen aiheuttama lisätyö. Perspektiiviprojektion kanssa täytyy olla hieman huolellisempi. Tällöin ehkä yksinkertaisin ja ymmärrettävin toimintataktiikka on seuraava: Monikulmioliukuhihnassa toimitaan täsmälleen samoin kuin ortografisen yhdensuuntaisprojektion tapauksessa. Puun läpikäynti aloitetaan muunnoksella N o. Tullessamme vaiheeseen, jossa edellä leikkasimme monikulmion suorakulmaisella kanonisella kuvasärmiöllä, toimimme nyt hieman toisin. Leikkaammekin vuorossa olevan monikulmion kanoniseen asentoon kuvautuneella katkaistulla pyramidilla. Tämäkin on muodoltaan konveksi avaruuden R 3 osajoukko, jota rajaa kuusi tasoa. Katkaistun pyramidin pohjataso on taso z = ja sen etutaso on z = d n /d f. Monikulmiota leikataan Sutherlandin ja Hodgmanin menetelmässä näillä tasoilla samoin kuin aiemmin. Loput neljä sivutasoa kulkevat kaikki origon kautta ja niiden yhtälöt ovat ± 0, 0 x x 2 x 3 0 = 0 ja 0 ±, 0 x x 2 x 3 0 = 0. (3.26) Nämä on muodostettu valitsemalla sivutasolta mielivaltainen piste x = (x,x 2,x 3,) T ja kunkin sivutason erääksi tunnetuksi pisteeksi on valittu x 0 = (0,0,0,) T. Vasta kun monikulmio on leikattu katkaistun pyramidin kanssa, sovelletaan saadun leikkausmonikulmion kärkipisteisiin perspektiivimuunnosta D ja palataan karteesisiin koordinaatteihin. Tämän jälkeen piirto etenee kuin aiemmin. Kuten jo aiemmin tuli todettua, perspektiivimuunnoksen jälkeisellä jakolaskulla on se vaikutus, että ainoastaan katkaistun pyramidin sisäpuoli kuvautuu laatikon [,] [,] [0,] sisälle. Kaikki muut avaruuden pisteet kuvautuvat laatikon ulkopuolelle. Jos olemme täysin vakuuttuneita, että kaikki näkymän monikulmiot sijaitsevat kameran etupuolella, voimme käyttää yksinkertaisempaa menetelmää, jossa monikulmioiden leikkaaminen tehdään vasta karteesiseen koordinaatiston palaamisen jälkeen. Jos kamera on asemoitu esimerkiksi siten, että ennen perspektiivimuunnosmatriisilla D kertomista monikulmion jonkin kärkipisteen z-koordinaatti on nolla aiheutuu tästä karteesiseen koordinaatistoon palattaessa ongelmia. Kyseisen pisteen karteesisia koordinaatteja ei ole määritelty, koska niitä laskettaessa pitäisi jakaa nollalla. Tämä singulariteetti on esitetty kuvassa Siinä on esitetty mielivaltaisen pisteen (x,y,z,) T z-koordinaatin kuvautuminen perspektiivimuunnoksessa karteesisiin koordinaatteihin palattaessa.

25 64 LUKU 3. KOLMAS ULOTTUVUUS 2.5 (z+0.)/(0.9*z) Kuva 3.34: Pisteen z-koordinaatin kuvautuminen karteesiseen koordinaatistoon perspektiivimuunnoksessa. (z+0.)/(0.9*z) Kuva 3.35: Pisteiden z-koordinaatin kuvautuvat epälineaarisesti mutta monotonisesti väliltä [, k] välille [0,], kuvan esimerkissä k = /0.

26 3.4. PROJEKTIOKUVAN MUODOSTAMINEN KOLMIULOTTEISESTA NÄKYMÄSTÄ65 Suoralla laskulla näemme, että matriisi D kuvaa vektorin (x, y, z, ) vektoriksi (x,y,(z + k)/(k ), z) T, joten kuvapisteen karteesiset koordinaatit ovat ( x/z, y/z,(z + k)/(z zk)). Kuvan 3.34 esimerkissä k = /0, ja siitä havaitsemme selvästi muunnoksen singulariteetin arvolla z = 0. Kuvassa 3.34 nähdään kuinka perspektiivimuunnoksessa karteesisiin koordinaatteihin pisteiden z-koordinaatit kuvautuvat epälineaarisesti mutta monotonisesti väliltä [, k] välille [0,].

27 66 LUKU 3. KOLMAS ULOTTUVUUS

28 Luku 4 Näkyvyys, realismi Tässä luvussa esittelemme yleisimmät ja yksinkertaisimmat tekniikat, joiden avulla voimme piirtää realistisemman näköisiä pikselikuvaesityksiä annetusta näkymästä. Useita näistä tekniikoista yhdistää se, että ne toteutetaan monikulmioiden rasterointivaiheessa yleistämällä suoraviivaisesti kappaleessa esitettyä liukuvan suoran täytettyjen monikulmioiden rasterointimenetelmää. Haluamme lopputuloksena rasteroidun kuvan, jossa objektien syvyysjärjestys on oikein, eli lähellä olevat objektit piirtyvät kauempana olevien objektien päälle. Tätä ongelmaa kutsutaan näkyvien pintojen määräämiseksi (englanniksi visible surface determination, historiallisesti myös piiloviivojen poistoksi, englanniksi hidden line removal). Tähän on kehitetty useita menetelmiä, jotka luokitellaan konservatiivisiksi menetelmiksi, mallitustarkkuuden menetelmiksi (engl. object precision visible surface determination) ja esitystarkkuuden menetelmiksi (engl. image precision visible surface determination). Historiallisesti erittäin suosittu tietokonegrafiikan tutkimusalue on ollut näkyvien pintojen määrääminen mallitustarkkuudella. Nykyään yleisimmin käytetty menetelmä on esitystarkkuudella (pikselitarkkuudella) toimiva z-puskurimentelmä. Esittelemme jatkossa menetelmiä kaikista kolmesta luokasta. Myöhemmin luvussa 4.2 sijoitamme maailmankoordinaatistoon myös valonlähteitä ja esittelemme yksinkertaisia valaistusmalleja realismin lisäämiseksi. Monikulmioiden sävytys toteutetaan kahdella eri vaihtoehdolla, jotka poikkeavat toisistaan siinä, kuinka usein valittua valaistusmallia evaluoidaan monikulmiota rasteroitaessa. Lisäyksityiskohtien luomiseksi käsittelemme lyhyesti niin kutsuttuja mapping -tekniikoita. Näitä sovelletaan tyypillisesti siten, että valaistusmallia evaluoitaessa poikkeutamme mallin heijastuskertoimia tai muita suureita käyttäjän antaman erillisen hakutaulukon arvojen avulla. Tyypillinen sovellus on niin 67

29 68 LUKU 4. NÄKYVYYS, REALISMI kutsuttu tekstuurikartta, josta haetaan pinnan pisteiden heijastuskertoimien arvot. Tämä tekniikka mahdollistaa yksityiskohtien lisäämisen malliin ilman, että objektien pintoja tarvitsee esittää hyvin pienillä monikulmioilla, joita samalla tarvittaisiin hyvin paljon. Mapping-tekniikat ovat siis eräänlainen huijaus, jolla mallin yksityiskohtia lisätään kasvattamatta silti laskentavaativuutta merkittävästi. Sekä sävytys valaistussimulointeineen (ja tekstuuri- yms. karttoineen) että näkyvien pintojen määrääminen z-puskuritekniikalla voidaan helposti toteuttaa monikulmion piirron yhteydessä, kunhan käytetään kappaleen liukuvan suoran menetelmää. Tämän luvun valaistusmallit ovat kaikki lokaaleja, eli ne huomioivat ainoastaan objektin pintapisteen ja valonlähteiden keskinäiset suhteet. Ne eivät huomioi näkymän muiden pintojen vaikutusta valon kulkeutumiseen valonlähteistä tarkasteltavalle pinnan pisteelle. Näin ollen lokaalit valaistusmallit eivät kykene realistisesti esittämään monia tärkeitä ilmiöitä kuten esimerkiksi toisten objektien langettamia varjoja. Varjoja voidaan kuitenkin approksimoida soveltamalla z-puskuritekniikkaa määritettäessä ne objektien pintapisteet, jotka ovat näkyvissä katsottaessa näkymää kunkin valonlähteen suunnasta. Tätä seikkaa hyödynnetään lopuksi esiteltävässä Williamsin kaksivaiheisessa z-puskurivarjoalgoritmissa. 4. Näkyvien pintojen määrääminen Ensimmäinen seikka joka piirrossa tulee huomioida on se, että kuvaan rasteroidaan vain ja ainoastaan ne osat monikulmioista, jotka annetusta katselupisteestä näkyvät. Näkyvien pintojen määräämismenetelmät luokitellaan kolmeen pääluokkaan: Konservatiiviset menetelmät eivät pyri ongelman täydelliseen ratkaisemiseen vaan niitä käytetään esikäsittelymenetelminä, joilla voidaan eliminoida jatkokäsittelystä suuri osa näkymän monikulmioista. Jäljelle jääneet epävarmat tapaukset voidaan huolehtia joko mallitustarkkuudella toimivilla menetelmillä (englanniksi object precision visible surface determination) tai esitystarkkuudella toimivilla menetelmillä (englanniksi image precision visible surface determination). Historiallisesti suosituin tutkimuskohde tietokonegrafiikassa olivat juuri mallitustarkkuuden menetelmät näkyvien pintojen määräämiseksi. Nykyään näkyvien pintojen määrääminen ratkaistaan yleensä esitystarkkuudella toimivalla z-puskurimenetelmällä, joka voidaan toteuttaa erittäin tehokkaasti näytönohjainelektroniikalla.

30 4.. NÄKYVIEN PINTOJEN MÄÄRÄÄMINEN Konservatiivinen menetelmä: taakse osoittavien monikulmioiden poistaminen Ajatellaan objekti kuvatun yhdensuuntaisprojektion normalisointimuunnoksella kanoniseen kuvasärmiöön. Ennen monikulmioiden leikkaamista (projektiotyypin mukaan joko kanonisella kuvasärmiöllä tai kanonisella kuvapyramidilla) ja mahdollista perspektiivimuunnosta, voimme yksinkertaisella menetelmällä eliminoida jatkokäsittelystä keskimäärin puolet näkymän monikulmioista. Eliminoidaan sellaiset monikulmiot, joiden pinnan ulkonormaalivektorit n osoittavat samaan puoliavaruuteen kuin suuntavektori l os (line of sight), missä l os = p 0 (0,0,0,) T on suuntavektori joka yhdistää kameran paikan (origo) mielivaltaiseen tarkasteltavan monikulmion pisteeseen p 0, joka esitetetään normalisointimuunnettuna. Pisteeksi p 0 voidaan esimerkiksi valita tarkasteltavan monikulmion mielivaltainen kärkipiste. Tarvitsemme sellaiset kanonisen kuvanottotilanteen koordinaatistossa (nimitetään sitä jatkossa kanoniseksi koordinaatistoksi) määrätyt objektien pinnat muodostavien tasomonikulmioiden normaalivektorit, jotka osoittavat ulospäin objektista. Nämä saadaan hierarkista mallia käytettäessä kuvattua primitiiviobjektien pintamonikulmioiden ulkonormaalivektoreista kappaleen 2.3. tekniikalla. Tätä varten alustamme puun läpikäyntiä varten normaalivektorit kanoniseen koordinaatistoon kuvaavaksi muunnosmatriisiksi M = (No ) T = S(d f,d f,d f )S(tan(θ w /2),tan(θ h /2))R( w, v, n) T T (p x, p y, p z ) T. (4.) Puuta läpikäydessä kerromme tähän mennessä kumuloituneeseen muunnokseen oikealta siirryttävään puun haaraan liitetyn muunnoksen M i käänteismatriisin transpoosimatriisin (Mi ) T. Latvasolmuun liitetyn primitiiviobjektin pintamonikulmion mallituskoordinaateissa määrätyt ulkonormaalisuuntavektorit kerrotaan kumuloituneella muunnosmatriisilla ja näin saamme kyseisen pintamonikulmion normaalivektorin kanonisessa koordinaatistossa: n = (No ) T (M )T (M2 )T...(Mq ) T n o (4.2) Lopputuloksena saatava suuntavektori n ei välttämättä ole yksikkövektori, vaikka mallituskoordinaateissa ne sellaisiksi määritetäänkin. Tämä ei kuitenkaan haittaa, sillä varsinainen monikulmion hylkääminen tehdään sisätulolausekkeen d = ( n, l os ) (4.3)

31 70 LUKU 4. NÄKYVYYS, REALISMI ( p p p 2 p ) x ( 0 ) p 0 p p 2 Kuva 4.: Normaalivektorin laskeminen kärkipisteiden koordinaateista. etumerkin avulla. Jos d >= 0, ei monikulmio voi näkyä lopullisessa kuvassa lainkaan. Jos d < 0, emme voi varmuudella sanoa näkyykö kyseinen monikulmio vai ei. Ulkonormaalivektorin n voi myös laskea suoraan kärkipisteiden kanonisista koordinaateista. Tällöin helpointa on, jos kärkipisteet on lueteltu kiertojärjestyksessä, esimerkiksi kuten kuvassa Objekti kuvautuu kanoniseen koordinaatistoon soveltamalla sen kärkipisteisiin normalisointimuunnoksen ja mallitusmuunnoksen yhdistetyllä kuvauksella, jota riittää soveltaa primitiiviobjektin kärkipisteiden mallituskoordinaatteihin. Jos sivumonikulmioiden kärkipisteet on ulkopuolelta katsottaessa lueteltu vastapäivään, saamme halutun normaalivektorin n ristitulon avulla. Olkoon p 0, p ja p 2 kolmen vastapäivään kiertäen peräkkäisen kärkipisteen kanoniset koordinaatit. Normaalivektori saadaan näistä lausekkeena n = (p 2 p ) (p 0 p ), (4.4) katso kuva 4.. Menetelmää on mahdollista vielä tehostaa. Oletetaan, että käytössämme on monikulmion kautta kulkevan hypertason yhtälö. Mikä tahansa kyseisen hypertason piste p = (p x, p y, p z,) toteuttaa yhtälön n x p x + n y p y + n z p z + d = 0 ( n, p) + d = 0 ( n,( p p 0 )) = 0, (4.5) missä n = (n x,n y,n z,0) on ulkonormaalivektori ja d R on vakio, joka voidaan ratkaista kaavasta (4.5) mielivaltaisen kärkipisteen p 0 avulla. Lauseke n x p x +n y p y + n z p z + d saa positiivisen arvon, jos piste p on normaalivektorin osoittamassa puoliavaruudessa ja negatiivisen arvon, jos piste on vastakkaisessa puoliavaruudessa.

32 4.. NÄKYVIEN PINTOJEN MÄÄRÄÄMINEN 7 Näin ollen voimme testata lausekkeen n x p x +n y p y +n z p z +d etumerkkiä kamerapisteessä p = (0,0,0,) T, jolloin itse asiassa vakion d etumerkki suoraan kertoo voiko monikulmio näkyä. Jos d 0, on kamerapiste siinä puoliavaruudessa, joka jää objektin sisälle kyseisen monikulmion mielessä ja monikulmio ei piirry näkyviin. Jos d > 0, otamme kyseisen monikulmion jatkokäsittelyyn. Ongelmaksi jää monikulmion sivuhypertason yhtälön kertoimien määrääminen kanonisessa koordinaatistossa. Oletetaan, että ne on tallennettu mallituskoordinaatistossa määrättyinä puun latvasolmun primitiiviobjektin tietojen joukkoon. Mallituskoordinaateissa sivutason yhtälö olkoon ( a o, p o ) = 0, missä a T o = (a o x,a o y,a o z,a o w), p T o = (p o x, p o y, p o z,), (4.6) joten yhtälön kertoimet mallituskoordinaateissa antaa vektori a o. Oletetaan lisäksi, että yhtälö on muodostettu siten, että edellinen sisätulo saa positiivisen arvon, jos olemme mallituskoordinaatiston siinä monikulmion tason määräämässä puoliavaruudessa, johon a.o. sivumonikulmion ulkonormaalisuuntavektori osoittaa. Kun objekti kuvautuu mallituskoordinaatistosta kanoniseen koordinaatistoon, sen pisteiden homogeenisiin koordinaattivektoreihin sovelletaan muunnosta M. Haluamme tason yhtälön kanonisessa koordinaatistossa muodossa ( a k, p k ) = 0. Osoittautuu, että yhtälön kertoimet kuvautuvat aivan samoin kuin normaalivektorit. Tämä nähdään seuraavasti: On voimassa joten valinta 0 = ( a k, p k ) = ( a k,m p o ) = (M T a k, p o ), (4.7) a k = M T a o = (a k x,a k y,a k z,a k w) T (4.8) tuottaa sopivan kerroinvektorin, josta monikulmion mahdollista hylkäystä varten riittää siis laskea viimeinen komponentti a k w. Tutkitaan edellisen tekniikan toimintaa esimerkin avulla. Yksinkertaisuuden vuoksi käsitellään kaksiulotteista tilannetta (jolloin hypertasot ovat tason suoria). Olkoon mallituskoordinaatistossa määrätyn monikulmion eräs sivujana suoralla y = x + ja jääköön monikulmion ulkopuolelle tämän suoran alapuolinen puoliavaruus. Tällöin sopiva suoran yhtälö on x y + = 0 eli a o = (,,) T. Olkoon muunnosmatriisi puolestaan x, y = 0, (4.9) M = T (0,)R(π/2)T (0, ), (4.0)

33 72 LUKU 4. NÄKYVYYS, REALISMI y suora y= x, eli x+y =0 suora y=x+, eli x y+=0 normaalivektori normaalivektori piste (0,) x Kuva 4.2: Hypertasojen yhtälöiden kuvautuminen affiineissa muunnoksissa: Kaksiulotteinen esimerkki. eli tason kierto vastapäivään 90 astetta pisteen (0, ) ympäri. Lopputuloksena tulisi saada suora y = x, kuten kuvasta 4.2 havaitaan. Tällöin M T = T (0, ) T R(π/2)T (0,) T = = 0 0. (4.) Näin ollen muunnetun suoran yhtälön kertoimiksi saadaan 0 0 a k = 0 0 =, (4.2) eli suoran yhtälö on x + y = 0, eli y = x. Tätä tekniikkaa kutsumme taakse osoittavien monikulmioiden poistamiseksi (englanniksi backface culling). Huomionarvoinen seikka on se, että jos näkymä koostuu yhdestä konveksista objektista, jonka pinta on esitetty monikulmioin, antaa tämä menetelmä suoraan oikean ratkaisun näkyvyysongelmaan. Kyseisen menetelmän voi toteuttaa myös maailmankoordinaatistossa ennen yhdensuuntaisprojektion normalisointimuunnosta. Tällöin normaalivektorit tai tasojen yhtälöiden kertoimet tarvitaan tietenkin myös siellä. Samat tekniikat yleis-

34 4.. NÄKYVIEN PINTOJEN MÄÄRÄÄMINEN 73 Kuva 4.3: Taakse osoittavien monikulmioiden poisto ei toimi, jos objektin pinnassa on reikiä. tyvät tähän suoraviivaisesti. Muunnettaessa vektoreita tai yhtälön kertoimia mallituskoordinaatistosta, käytetään ainoastaan mallitusmuunnosta, joka saadaan puuesityksestä. Lisäksi kameran sijaintipaikkana tulee origon sijasta käyttää sen kamerapisteen maailmankoordinaatteja. Menetelmä ei toimi oikein sellaisissa tapauksissa joissa objektin pinta ei ole suljettu, eli siinä on reikiä. Tämä tarkoittaa sitä, että jos esimerkiksi haluamme mallittaa pahvilaatikon josta puuttuu kansi, on kukin laatikon sivutaso esitettävä vähintään kahdella monikulmiolla, joiden normaalivektorit osoittavat vastakkaisiin suuntiin, muutoin käy kuin kuvassa 4.3. Eli tällaisen avoinaisen pahvilaatikon sisäpuoli on se tilavuus, joka jää sen seinien sisäpuolelle. Asiaa tällä tavoin ajateltuna ei tässä olekaan mitään epäselvää, eihän avoin pahvilaatikko rajaa muuta kuin seinien sisään jäävän tilavuuden. Jo aiemmin esittämämme monikulmioiden leikkaaminen kanonisen kuvasärmiön ja -pyramidin kanssa on myös esimerkki konservatiivisesta näkyvien pintojen määräämismenetelmästä. Sillähän pystytään parhaassa tapauksessa eliminoimaan hyvinkin suuri osa monikulmioista jatkokäsittelystä. Tämä täydennettynä taakse osoittavien monikulmioiden poistamisella tehostaa itse piirtoa huomattavasti Piirtojärjestyksen määrääminen mallitustarkkuudella: BSPpuu Tarkastellaan seuraavaksi niin kutsuttujen BSP-puiden käyttöä näkyvyysongelman ratkaisemiseksi. Tämä menetelmä toteutetaan yleensä maailmankoordinaatistossa, koska se soveltuu erinomaisesti sellaisiin tilanteisiin missä näkymä on staattinen, mutta kameraa liikutellaan eri tavoin. Tyypillisiä sovelluksia ovat esi-

35 74 LUKU 4. NÄKYVYYS, REALISMI n 2a 2 n2 2b 3 n3 2b,3,5,6 4, 2a n 2a 2 n2 2bb 2ba 3 n a 4 n4 n6 n5 5 4 n4 n6 n5 5 2ba,6 2bb,3 6 6 n 2a 2 n2 2bb 2ba 3 n a 4 n4 n6 n5 5 2ba 6 3 2bb 6 Kuva 4.4: BSP-puun muodostaminen. merkiksi lentosimulaattorit. BSP-puu nimi tulee englannin kielen sanoista Binary Space Partitioning tree. Kyseessä on siis binaaripuurakenne. Puu muodostetaan siten, että sen juurisolmuun liitetään eräs näkymän pintamonikulmioista. Tämä valittu monikulmio jakaa avaruuden R 3 kahteen palaseen: Puolet avaruudesta jää monikulmion etupuolelle, puolet jää sen taakse. Se onko piste monikulmion edessä vai takana määräytyy jälleen monikulmion normaalivektorin perusteella. Piste on edessä, jos se on normaalivektorin osoittamassa puoliavaruudessa. Menetelmässä jaetaankin jäljelle jääneet monikulmiot kahteen joukkoon sen mukaan ovatko ne jakavan monikulmion edessä vai takana. Sen jälkeen puun vasempaan haaraan liitetään uusi haarautumissolmu, johon liitetään jokin alkuperäisen monikulmion etupuolelle jääneistä monikulmioista. Tämä monikulmio puolestaan jakaa juurisolmun etupuolelle jääneet monikulmiot kahteen luokkaan: edessä ja takana oleviin. Puun oikeaan haaraan puolestaan liitetään haarautumissolmu johon jakavaksi monikulmioksi valitaan jokin juurisolmun alkuperäisen monikulmion taakse jääneistä monikulmioista. Tämän monikulmion avulla juurisolmun monikulmion taakse jääneet monikulmiot jaetaan kahteen luokkaan. Menetelmää toistetaan rekursiivisesti, kunnes kaikki monikulmiot on käsitelty ja tuloksena saadaan kuvan 4.4 kaltainen puuesitys, joka ei luonnollisestikaan ole yksikäsitteinen vaan riippuu täysin jakavien monikulmioiden valinnasta. Menetelmässä on lisäksi se vaikeus, että jakavaksi valitun monikulmion pintataso (ava-

36 4.. NÄKYVIEN PINTOJEN MÄÄRÄÄMINEN 75 ruuden R 3 kaksiulotteinen hypertaso) saattaa kulkea monikulmioiden läpi. Tässä tapauksessa kyseiset monikulmiot joudutaan jakamaan kahteen palaseen. Tason etupuolinen palanen liitetään vasempaan alipuuhun ja taakse jäävä palanen oikeaan alipuuhun sijoitettaviin monikulmioihin. Monikulmion jakaminen palasiin hypertasolla voidaan tehdä samaan tyyliin kuin Sutherlandin ja Hodgmanin menetelmässä. Siinähän muodostettiin alkuperäisestä monikulmiosta liikkeelle lähtien vaiheittain tulosmonikulmio. Nyt leikkaustasoja on vain yksi kappale, jakavaksi valitun monikulmion pintataso. Sutherlandin ja Hodgmanin menetelmällä (kolmiulotteisena) saadaan sisäpuoliseen puoliavaruuteen jäävä monikulmio. Ulkopuoliset palaset saadaan vaikka siten, että aina kun sivujana läpäisee hypertason sisältä ulos, aloitetaan uusi ulkopuolelle jäävä palanen tallentaen sen listaan alkioksi äskeinen leikkauspiste. Sitten listaan talletetaan kiertojärjestyksessä alkuperäisen monikulmion tason ulkopuoliset kärkipisteet, kunnes vuorossa oleva jana jälleen leikkaa hypertasoa suuntanaan tällä kertaa ulkoa sisälle. Tämä leikkauspiste täydentää ulosjäävän palasen. Seuraava sisältä ulos leikkauspiste käynnistää jälleen uuden ulkopuolelle jäävän palasen jne. Yleensä pinta esitetään konveksien monikulmioiden avulla, jolloin monikulmio jakautuu korkeintaan kahteen konveksiin palaseen. Tämä menetelmä sopii erittäin hyvin tilanteisiin, joissa näkymä on staattinen, koska puuesityksestä saadaan tällöin tehokkaasti esille monikulmioiden oikea piirtojärjestys vaikka kameraparametreja muutetaankin. Jos näkymän objektit ovat dynaamisia, käy menetelmä kalliimmaksi, koska puu täytyy muodostaa aina uudelleen ja uudelleen. BSP-puiden avulla saamme helposti määriteltyä oikean piirtojärjestyksen monikulmioille. Periaatteessa seuraava lyhyt rekursiivinen pseudokoodilla kirjoitettu aliohjelma riittää: void BSP_display(BSP_tree *tree) { if (tree) if (katselupiste monikulmion tree->polygon edessä){ BSP_display(tree->right); /* Piirrä takana olevat */ display_polygon(tree->polygon); /* Piirä jakava */ BSP_display(tree->left); /* Piirrä edessä olevat */ } else { BSP_display(tree->left); /* Piirrä edessä olevat */ /* Poista seuraava rivi, jos haluat jättää piirtämättä taakse osoittavat monikulmiot */

37 76 LUKU 4. NÄKYVYYS, REALISMI n 2a 2 n2 2ba 2bb 3 n a k 4 n4 k2 n6 5 n5 2ba 6 3 2bb 6 Kuva 4.5: Piirtojärjestyksen määrääminen BSP-puuesityksestä. } } display_polygon(tree->polygon); /* Piirä jakava */ BSP_display(tree->right); /* Piirrä takana olevat */ Esimerkkinä määrätään edellisen algoritmin avulla monikulmioiden piirtojärjestys, kun kamera sijaitsee kuvan 4.5 pisteissä k ja k2. Jos kamera sijaitsee paikassa k, on se juurisolmumonikulmion 4 takana, joten ensin piirretään rekursiivisesti vasen alipuu. Piste k on monikulmion 5 etupuolella, joten piirretään ensin oikea alipuu, jonka juurisolmuun liittyy monikulmio 3. Piste k on monikulmion 3 takana, joten ensin piirretään vasen alipuu, joka on tyhjä, sen jälkeen monikulmio 3 ja viimeksi oikea alipuu, eli monikulmio 2bb. Tämän jälkeen piirretään tasoa ylempi juurisolmu, eli monikulmio 5 ja käydään läpi sen vasen alipuu. Järjestykseksi tulee 6, 2ba. Sen jälkeen piirretään monikulmio 4 ja rekursiivisesti sen oikea alipuu järjestyksen ollessa 2a,. Eli piirtojärjestys on 3, 2bb, 5, 6, 2ba, 4, 2a ja. Vastaavasti kameran ollessa pisteessä k2, antaa algoritmi piirtojärjestyksen 2a,, 4, 3, 2bb, 5, 6 ja 2ba. Koska menetelmä toteutettiin maailmankoordinaateissa, täytyy piirtoon menevät monikulmiot kuvata normalisointimuunnoksella ja leikata kuvasärmiön kans-

38 4.. NÄKYVIEN PINTOJEN MÄÄRÄÄMINEN 77 sa kuten aiemmin on esitetty. Rasterointi voidaan tehdä liukuvan suoran menetelmän perustoteutuksella, koska puuesitys antaa valmiiksi oikean piirtojärjestyksen Näkyvien monikulmioiden määrääminen mallitustarkkuudella: Weilern ja Athertonin menetelmä Huomautus perspektiivimuunnoksesta: Kuten havaitsimme aiemmin, kuvaa perspektiivimuunnos katkaistun pyramidin laatikoksi [, ] [, ] [0, ]. Muodonmuutos tapahtuu palattaessa takaisin karteesiseen koordinaatistoon. Tässä yhteydessä suorat kuvautuvat myös suoriksi, joten lopuksi tehtävän yhdensuuntaisprojektion vaikutuksesta ne näkyvät lopputuloksessa suorina tai pisteinä. Tämä nähdään seuraavasti. Olkoon suora esitettynä parametrimuodossa (x(t),y(t),z(t),) T = (x 0 +t(x x 0 ),y 0 +t(y y 0 ),z 0 +t(z z 0 ),) T. (4.3) kanonisessa koordinaatistossa, johon päädymme yhdensuuntaisprojektion normalisointimuunnoksella. Sovelletaan parametriesitykseen perspektiivimuunnosmatriisia D ja palataan karteesiseen koordinaatistoon jakamalla tulosvektorin kolme ensimmäistä komponenttia neljännellä. Saamme suoralle esityksen x (t) y (t) = z (t) k + x 0+t(x x 0 ) z 0 +t(z z 0 ) y 0+t(y y 0 ) z 0 +t(z z 0 ) k ( k)(z 0 +t(z z 0 )). (4.4) Saatu parametriesitys esittää suoraa. Ensinnäkin jos projisoitava suora on xytason suuntainen, eliz = z 0, sievenee yllä oleva lauseke muotoon x (t) x 0+t(x x 0 ) x 0 x z y (t) 0 = y z 0+t(y y 0 ) 0 t x 0 z 0 y z z 0 = 0 y z 0 t y 0 z 0. (4.5) (t) k + k ( k)z 0 k + k ( k)z 0 Jos suora ei ole xy-tason suuntainen, vaihdamme parametriesityksen muuttujanvaihdolla u = z 0 +t(z z 0 ) t = uz 0 u(z z 0 ), (4.6) jota sovelletaan kaavaan (4.4). Saamme x z 0 x x 0 z (u) ỹ z (u) z 0 u x x 0 z z 0 z = 0 y y 0 z z z z 0 u y y 0 z z 0, (4.7) (u) k k u + k

39 78 LUKU 4. NÄKYVYYS, REALISMI joka esittää selvästi suoraa. Tästä havaitsemme sen mielenkiintoisen seikan, että loppuvaiheen karteesisissa koordinaateissa janan z-koordinaatti saadaan soveltamalla janan kanonisen koordinaatiston z-koordinaatin käänteislukuun affiinia kuvausta. Tätä seikkaa voidaan myöhemmin hyödyntää tekstuurikoordinaattien interpoloinnissa. Vastaavasti on helppoa nähdä, että tasot kuvautuvat myös tasoiksi perspektiivimuunnoksessa kun palataan karteesiseen koordinaatistoon. Olkoon kanonisessa koordinaatistossa määrätty tason yhtälö ( n,( x x 0 )) = 0 ( a k, x) = 0, missä a k = n n 2 n 3 (n x 0 + n 2x2 0 + n 3x3 0) (4.8) x = (x,x 2,x 3,) T ja x 0 = (x 0,x0 2,x0 3,)T ovat yleisen kanonisen koordinaatiston pisteen ja mielivaltaisen tason pisteen homogeeniset koordinaattivektorit, ja n = (n,n 2,n 3,0) T on tason ulkonormaalisuuntavektori kanonisessa koordinaatistossa. Koska perspektiivimuunnosmatriisi D on kaikissa järkevissä tilanteissa kääntyvä (eli D on olemassa), on oltava voimassa, ( a k, x) = 0 α(d T a k,d x) = 0, α R \ {0}. (4.9) Olkoon x = D x, eli x on perspektiivimuunnosmatriisin kuvaama homogeeninen koordinaattivektori x. Tällöin, pisteen x sijaitessa kanonisessa koordinaatistossa olevan katkaistun pyramidin sisällä, on väistämättä vektorin x neljäs komponentti x 4 nollasta poikkeava. Tällöin, valitsemalla kaavassa (4.9) α = /x 4, 0 = x 4 (D T a k, x ) = (D T a k, x /x 4). (4.20) Muistaen matriisin D rakenteen, on x /x 4 = D x/x 4 = x /x 3 x 2 /x 3 (x 3 + k)/(x 3 x 3 k) (4.2)

40 4.. NÄKYVIEN PINTOJEN MÄÄRÄÄMINEN 79 ja a = D T a k = n n 2 k k (n x 0 + n 2x n 3x 0 3 ) n 3 (n x 0 + n 2x n 3x 0 3 )/k, (4.22) Joten ( a, x /x 4 ) = 0 on todellakin tason yhtälö, kunhan tehdään koordinaatistomuunnos (x,x 2,x 3,) T ( x /x 3, x 2 /x 3,(x 3 +k)/(x 3 x 3 k),) T, ja vektori a antaa tasoyhtälön kertoimet tässä koordinaatistossa. Weilerin ja Athertonin näkyvien pintojen määräämismenetelmä toteutetaan perspektiivimuunnoksen ja karteesisiin koordinaatteihin palaamisen jälkeen, ennen viimeisenä tehtävää yhdensuuntaisprojektiota. Menetelmässä oletetaan, että näkymä rasteroidaan z-akselin suuntaisen yhdensuuntaisprojektion jälkeen. Lisäksi oletamme, että monikulmiot eivät leikkaa itseään, eivätkä ne mene toistensa läpi. Monikulmiot saavat toki leikata toisia monikulmioita reunajanoillansa. Oletetaan lisäksi, että seuraavat ennakkotoimenpiteet on tehty:. Monikulmiot on leikattu katkaistun pyramidin kanssa kanonisessa koordinaatistossa. 2. Monikulmioiden sivutasojen yhtälöt on muodostettu ja kuvattu perspektiivimuunnoksella (katso edellinen huomautus). 3. Monikulmioiden kärkipisteet on kuvattu perspektiivimuunnoksella ja palautettu karteesiseen koordinaatistoon 4. Perspektiivimuunnoksella kuvatut sivutasojen yhtälöt on muutettu muotoon z = ax + by + c, ja z-akselin suuntaiset monikulmiot on poistettu. Sivutasojen yhtälöt muunnetaan kohdan 4 muotoon perspektiivimuunnoksella saadun kerroinvektorin a = (a,a 2,a 3,a 4 )T = D T a k alkioiden avulla. Tässä vektori a k sisältää tason yhtälön kertoimet kanonisessa koordinaatistossa, ja a k saadaan mallituskoordinaatiston kerroinvektorista a o kaavalla a k = No T M T a o, kuten kappaleessa 4.. havaittiin. Muunnettava sivutason yhtälö on a x + a 2y + a 3z + a 4 = 0 z = a a 3 x a 2 a 3 y a 4 a, jos a 3 0, (4.23) 3 ja monikulmio hylätään jatkokäsittelystä liki z-akselin suuntaisena, jos a 3 < ε, missä ε on pieni positiivinen toleranssiparametri.

41 80 LUKU 4. NÄKYVYYS, REALISMI Menetelmän yleisperiaate on seuraava: Aluksi pyritään löytämään jokin ehdokas monikulmioksi, joka on muiden edessä. Täksi voidaan valita vaikka sellainen, jonka jonkin kärkipisteen (tai vaikka kärkipisteiden keskiarvon) z-koordinaatti on pienin mahdollinen. Nimetään tämä monikulmioksi W. Seuraavaksi leikataan kaikkien muiden monikulmioiden xy-projektiot monikulmion W xy-projektiolla. Tähän voidaan käyttää tasografiikkaluvussa esiteltyä Weilerin ja Athertonin monikulmioiden leikkausmenetelmää. Sitten poistetaan W:n taakse syvyyssuunnassa jäävät monikulmioiden osat. Tätä varten täytyy laskea leikkausmenetelmässä monikulmioiden leikkauspistetietueisiin talletettujen parametrien avulla leikkauspisteiden z-koordinaatit. Monikulmion osa voidaan poistaa, jos sen kaikki kärkipisteet ovat W:n pintatason takana. Tämä voidaan testata W:n tasoyhtälön avulla. Jos osoittautuu, ettei monikulmion W edessä ole enää monikulmioita (eli kaikki leikkausjoukkoon kuuluvat monikulmiot ovat W:n takana), voidaan monikulmio W piirtää näkyviin. Muussa tapauksessa etupuolelle jääneitä monikulmiopalasia ja monikulmiota W käsitellään rekursiivisesti samalla tekniikalla. Lisäksi W:n projektion ulkopuoliset monikulmiot ja monikulmioiden palaset käsitellään rekursiivisesti samalla tavalla. Monikulmioiden leikkaus tehdään tehokkuussyistä aina leikkaavan monikulmion esi-isän kanssa. Menetelmässä leikkaava monikulmio saattaa olla palanen isompaa alkuperäistä monikulmiota, ja yleensä aluperäisversio on yksinkertaisempi muodoltaan ja sisältää vähemmän kärkipisteitä, joten sillä on tehokkaampaa leikata toisia monikulmioita. Tämä on helpointa toteuttaa siten, että aluksi alkuperäisistä monikulmioista muodostetaan kopiot, jotka talletetaan kappaleen tyylisiin rengaslistoihin. Monikulmiot esitettiin pointerilistana renkaisiin. Lisätään monikulmion tietoihin osoitinkenttä, nimeltään vaikkapa ancestor, joka tulee osoittamaan alkuperäiseen monikulmioon. Alustettaessa tämä osoitin asetetaan osoittamaan monikulmioon itseensä. Kun monikulmio pilkkoutuu palasiin, kopioidaan pilkottavan monikulmion ancestor -osoittimen arvo osamonikulmion ancestor -osoittimeksi. Tästä on se etu, että jos leikkaavalla alkuperäisellä monikulmiolla leikataan itsensä jälkeläistä, tiedetään välittömästi, että jälkeläismonikulmion ja leikkaavan monikulmion leikkaus on jälkeläismonikulmio. Tämä voidaan huomioida monikulmioiden leikkausmenetelmässä ja näin välttää kallis leikkausjoukon määrääminen. Menetelmä pseudo-c-koodina on esitetty seuraavassa algoritmissa, joka on muokattu kirjan Foley, van Dam, Feiner and Hughes, Computer Graphics: Principles and Practice versiosta: Weilerin ja Athertonin algoritmi

42 4.. NÄKYVIEN PINTOJEN MÄÄRÄÄMINEN 8 void WA_visibleSurface(void) { polygon *polylist=lista alkup. monikulmioiden kopioista; /* ancestor-osoitin asetetaan osoittaamaan kopioon itseensä */ järjestä polylist kasvavan minimi z-koordinaatin mukaan; tyhjennä monikulmiopino; } /* Käsittele jäljellä olevat monikulmiot */ while (polylist!= NULL) WA_subdivide(polyList:n. monikulmio, &polylist); void WA_subdivide(polygon clip, polygon **polylist) { polygon *inlist=null; /* lista sisäpalasista */ polygon *outlist=null; /* lista ulkopalasista */ for (jokainen monikulmio mk *polylist:ssa) leikkaa mk clip-monikulmion "esi-isällä". Se löydetään "ancestor"-osoittimen avulla. Laita sisäpuoliset palaset listaan inlist, ulkopuoliset listaan outlist. Aseta palasten ancestor-osoittimeksi mk->ancestor; Käy läpi lista inlist, ja poista siitä ne monikulmiot, jotka ovat monikulmion clip takana. (Käytä tasoyhtälön kertoimia); /* Käsittele väärin järjestetyt palaset rekursiivisesti */ for (jokainen monikulmio mk listassa inlist, jota ei löydy monikulmiopinosta, ja joka ei ole monikulmion clip jälkeläinen /* eli mk->ancestor!= clip */) { } laita monikulmio clip monikulmiopinoon; WA_subdivide(mk, &inlist); poista monikulmiopinon päällimmäinen alkio;

43 82 LUKU 4. NÄKYVYYS, REALISMI /* Piirrä inlist:iin jäljelle jääneet monikulmiot */ for (jokainen monikulmio mk listassa inlist) piirrä(mk); } *polylist=outlist; Esitetyssä toteutuksessa käytetään pinoa huolehtimaan sellaisista tapauksista joissa monikulmiot menevät syklisesti päällekkäin (A on B:n päällä, B on C:n päällä ja C on A:n päällä), jolloin oikeaa etäisyysjärjestystä ei ole olemassa. Pinoon talletetaan sellaiset leikkausmonikulmiot, joiden käsittely on jäänyt kesken, koska niiden edestä on löytynyt monikulmion palanen, jonka projektio on leikkaavan monikulmion sisällä. Jos inlist-listasta löydetään monikulmio mk, joka on leikkaavan monikulmion clip edessä, etsitään monikulmiota mk monikulmiopinosta. Jos mk löytyy monikulmiopinosta, ei mk:ta tarvitse käsitellä rekursiivisesti, koska kaikki monikulmioiden palaset joiden projektiot ovat mk:n projektion sisällä, ja jotka samalla ovat mk:n takana on jo aiemmin käsitelty (mk:n inlistlistasta on jo aiemmalla rekursiotasolla poistettu mk:n takana olevat palat). Se, että monikulmio on leikkausmonikulmion pintatason takana todetaan leikkausmonikulmion tasoyhtälön avulla. Jos testattavan monikulmion jokainen kärkipiste (x i,y i,z i ) toteuttaa z i a c x i +b c y i +c c, katsotaan monikulmion olevan leikkausmonikulmion tason z = a c x+b c y+c c takana (a c,b c,c c ovat leikkausmonikulmion tasoyhtälön kertoimet). Monikulmioita leikattaessa leikataan aina niiden xy-projektioita. Monikulmioiden leikkausalgoritmissa tulee huolehtia seuraavista tapauksista: a: Kohdemonikulmio on leikkaavan monikulmion jälkeläinen. Tämä todetaan ancestorosoittimen avulla. Tällöin kohdemonikulmio hyväksytään sisäpuoliseksi palaseksi. b: Kohdemonikulmio on kokonaan leikkaavan monikulmion ulkopuolella. Tällöin kohdemonikulmio määrätään ulkopuoliseksi palaseksi. c: Kohdemonikulmio on kokonaan leikkaavan monikulmion sisäpuolella. Tällöin kohdemonikulmio voidaan suoraan hyväksyä sisäpuoliseksi palaseksi. d: Leikkaava monikulmio on kokonaan kohdemonikulmion sisäpuolella. Kopioidaan leikkaava monikulmio sisäpuoliseksi palaksi, mutta lasketaan kärki-

44 4.. NÄKYVIEN PINTOJEN MÄÄRÄÄMINEN 83 pisteille uudet z-koordinaatit kohdemonikulmion tasoyhtälön avulla. Kopion ancestor-osoittimeksi asetetaan kohdemonikulmion ancestor-osoittimen arvo. Kohdemonikulmio kopioidaan ulkopuoliseksi palaseksi, jossa on kuitenkin leikkaavan monikulmion muotoinen reikä. Lisätään siis tähän uusi rengaslista leikkaavan monikulmion kärkipisteistä vastapäivään kiertäen ja lasketaan näille alkioille uudet z-koordinaatit kohdemonikulmion tasoyhtälöstä. Kopion ancestor-osoittimeksi asetetaan kohdemonikulmion ancestorosoittimen arvo. Edellä leikkaavan monikulmion kärkipisteille (x i,y i,z i ) tuli laskea uudet z-koordinaatit. Tämä tehdään kohdemonikulmion tasoyhtälön avulla: z i := a k x i + b k y i + c k, missä a k, b k ja c k ovat kohdemonikulmion tasoyhtälön z = a k x + b k y + c k kertoimet. e: Muussa tapauksessa leikkausjoukkoon kuuluvat kohdemonikulmion palat määritetään sisäpuolisiksi palasiksi ja loput kohdemonikulmion palat ulkopuolisiksi palasiksi. Ancestor-osoittimeksi asetetaan kohdemonikulmion ancestorosoittimen arvo. Tässä tapauksessa rengaslistoihin on väistämättä syntynyt reunajanojen leikkauspistetietueita. Leikkauspisteitten x- ja y-koordinaatit saadaan janojen parametriesityksistä kuten aiemmin. Vastaavat z-koordinaatit lasketaan kohdemonikulmion tasoyhtälön avulla kuten kohdassa d. Pseukoodatussa algoritmissa monikulmiot tulostettiin kutsumalla aliohjelmaa piirrä. Tämä aliohjelma voi rasteroida monikulmiot täytettyinä liukuvan suoran menetelmällä tai rautalankakuviona, jolloin rasteroidaan vain reunajanat esimerkiksi midpoint-line -menetelmällä. Vaihtoehtoisesti ne voidaan tallettaa näkyvien monikulmioiden listaan L jatkokäsittelyä varten. Piirtoa varten täytyy näkyvät monikulmiot projisoida yhdensuuntaisprojektiolla (unohtaen kärkipisteiden z- koordinaatit) ja muodostaa kärkipisteitä vastaavat pikselikoordinaatit. Käytettäessä rautalankakuvioesitystä tulee osa reunajanoista piirrettyä kahteen kertaan. Tämän estämiseksi voidaan reunajanat piirtää listasta L, jolloin reunajanoista tehdä piirron yhteydessä hakemisto, jolloin hakuavaimena voidaan käyttää esimerkiksi päätepisteiden koordinaatteja. Tarkastellaan menetelmän toimintaa kuvan 4.6 esimerkin tapauksessa. Siinä on neljä monikulmiota A, B, C ja D, joiden kärkipisteiden z-koordinaatit on piirretty kuvaan. Näistä kolme, A, B ja C, menevät syklisesti päällekkäin. Ensin monikulmioista tehdään kopiot listaan polylist, ja ancestor-osoittimet laitetaan osoittamaan monikulmioihin itseensä. Kasvavan minimi z-koordinaatin mukainen järjes-

45 84 LUKU 4. NÄKYVYYS, REALISMI Bina 0.9 A 0.9 B 0.5 A BoutA 0.9 D 0.9 C 0.5 DoutA 0.4 DinA CoutA CinA (a) (b) BoutA AoutC AoutC DoutA C CoutA AinC=CinA CinA (c) (d) B BoutA BoutA AoutC DoutA CoutAinB DoutA CoutAoutB CoutAoutB CinA (e) (f) Kuva 4.6: Weilerin ja Athertonin menetelmän toiminta.

46 4.. NÄKYVIEN PINTOJEN MÄÄRÄÄMINEN 85 tys on A, B, C, D, joten while-silmukan ensimmäisellä iteraatiolla WA_subdividealiohjelmalle välitetään leikkaavaksi monikulmioksi A, katso kuva 4.6 (b). Aliohjelmassa käydään läpi välitetty lista. Ensimmäisenä leikataan A A:n esi-isällä. Koska A on A:n esi-isä, palauttaa leikkausaliohjelma A:n kopion sisäpuolisena monikulmiona, esi-isänään A. Tämä liitetään listaan inlist. Seuraavaksi leikataan B A:n esi-isällä eli A:lla. Tuloksena syntyy kaksi palasta, joiden molempien esiisä on B. Näistä sisäpuolinen palanen BinA liitetään listaan inlist ja ulkopuolinen palanen BoutA listaan outlist. Palasten uusien kärkipisteiden z-koordinaatit lasketaan monikulmion B tasoyhtälön avulla. Vastaavasti C:n ja D:n leikkauksina saadaan listaan inlist vietävät palaset CinA ja DinA, sekä palaset CoutA ja DoutA, jotka viedään listaan outlist. Näiden palasten esi-isät ovat C ja D, ja uusien kärkipisteiden z-koordinaatit lasketaan aina kohdemonikulmioiden C ja D tasoyhtälöistä. Seuraavaksi käydään läpi lista inlist. Se sisältää monikulmiot A, BinA, CinA ja DinA. Leikkaavan monikulmion A tasoyhtälön avulla havaitaan, että palaset BinA ja DinA ovat A:n pintatason takana, joten ne poistetaan listasta inlist. Tämän jälkeen käydään läpi inlist:iin jäljelle jääneet monikulmiot. Näistä A on leikkaavan monikulmion jälkeläinen, joten se ohitetaan. Toinen listan alkio CinA ei ole leikkaavan monikulmion jälkeläinen, eikä sitä löydy monikulmiopinosta, joka vielä on tyhjä. Näinollen leikkaava monikulmio A laitetaan monikulmiopinoon, ja kutsutaan rekursiivisesti aliohjelmaa WA_subdivide. Leikkavaksi monikulmioksi asetetaan CinA ja monikulmiolistaksi inlist, joka sisältää alkiot A ja CinA. Tultaessa uudelleen aliohjelmaan WA_subdivide, käydään läpi välitetty lista. Ensin leikataan A monikulmion CinA esi-isällä, joka on C. A ei ole C:n jälkeläinen, joten monikulmiot on leikattava. Tuloksena syntyy palaset AinC ja AoutC, esi-isinään A, jotka viedään listoihin inlist ja outlist. Uusien kärkipisteiden z- koordinaatit lasketaan A:n tasoyhtälöstä. Seuraavaksi leikataan CinA C:llä. C on CinA:n esi-isä, joten CinA:n kopio hyväksytään suoraan sisäpalaseksi. Nyt inlist sisältää monikulmiot AinC ja CinA, outlist:ssa on puolestaan AoutC. Listan inlist alkio AinC on C:n takana, joten se poistetaan. CinA:ta ei löydy pinosta, mutta se on leikkaavan monikulmion C jälkeläinen, joten uutta rekursiokutsua ei synny. Näin ollen palanen CinA hyväksytään piirrettäväksi. Parametrin polylist arvoksi asetetaan osoitin nykyiseen outlist:iin, joka siis sisältää ainoastaan alkion AoutC. Kun palataan takaisin rekursiokutsusta, on inlist-osoitin korvautunut osoittimella edelliseen outlist:iin, josta löytyy monikulmio AoutC. Pinosta poistetaan päältä monikulmio A. AoutC piirretään näkyviin seuraavaksi. Lopuksi polylist laitetaan osoittamaan tämän tason outlist:n alkuun. Tässä lis-

47 86 LUKU 4. NÄKYVYYS, REALISMI tassahan ovat monikulmiot BoutA, CoutA ja DoutA. Nyt palataan aliohjelmaan WA_visibleSurface, mutta parametri polylist osoittaakin nyt edellä mainittuun outlist:iin. While silmukka poimii seuraavaksi leikkausmonikulmioksi monikulmion BoutA, sehän on listan kärjessä. WA_subdividealiohjelmaan tultaessa on BoutA monikulmio clip ja polylist sisältää monikulmiot BoutA, CoutA ja DoutA. Seuraavaksi leikataan BoutA:n esi-isällä, eli B:llä monikulmiot BoutA, CoutA ja DoutA. BoutA on B:n jälkeläinen, joten se hyväksytään inlist:iin. CoutA jakautuu kahteen palaseen, CoutAinB ja CoutAoutB, joista ensimmäinen viedään inlist:iin ja jälkimmäinen outlist:iin. DoutA ei leikkaa B:tä, joten se viedään out- List:iin. InList:ia läpikäydessä havaitaan, että CoutAinB on B:n takana, joten se poistetaan. InList:iin jää siis vain BoutA, joka hyväksytään piirtoon. OutList:iin jäi CoutAoutB ja DoutA, jotka piirretään seuraavaksi Esitystarkkuudella toimiva menetelmä: Z-puskurointi Z-puskurointimenetelmä on nykyisin ehkä useimmin käytetty tapa ratkaista näkyvyysongelma. Menetelmä on kehitetty jo 970-luvulla, mutta sitä on alettu enemmän käyttää sovelluksissa vasta 980-luvulta alkaen. Syynä tämän elegantin menetelmän syrjimiseen oli se, että se vaatii muistitilaa. Menetelmässä ei riitä, että pidämme muistissa pelkästään bittikarttataulukon, johon pikselikuva rasteroidaan liukuvan suoran menetelmällä, ja piirrettävät monikulmiot. Sen lisäksi tarvitsemme toisen dimensioiltaan bittikartan kanssa yhtä suuren taulukon, jota kutsumme z-puskuriksi. Tämä muistin lisätarve aiheutti aikanaan sen, että kohta esiteltävää menetelmää pidettiin vain akateemista arvoa omaavana ratkaisumenetelmänä näkyvyysongelmalle. Nyttemmin, kun muistitila on halpaa ja sitä on melkein rajatta saatavilla, katsotaan alan piireissä näkyvyysongelma ratkaistuksi, ratkaisunaan z- puskurointi ja sen johdannaismenetelmät. Z-puskurointitekniikka on hyvin yksinkertainen toteuttaa liukuvan suoran monikulmion täyttömenetelmän yhteydessä. Oletamme jatkossa, että puskuritaulukko on kaksiulotteinen reaalilukutaulukko, jonka dimensiot ovat samat kuin piirrettävässä bittikarttataulukossa. Käytännön laitteistotason toteutuksissa se on yleensä kokonaislukutaulukko ja menetelmä on toteutettu tehokkuussyistä kokonaislukuaritmetiikalla. Konversio reaalilukuversiosta kokonaislukuversioon on kuitenkin suoraviivaista, hieman samaan tyyliin kuin johdimme kokonaislukuversion midpoint-line -menetelmän yhteydessä. Normalisointimuunnoksen ja monikulmioiden leikkaamisen jälkeen tiedämme, että piirrettävien monikulmioiden kärkipisteet ovat koordinaattiakselien suun-

48 4.. NÄKYVIEN PINTOJEN MÄÄRÄÄMINEN 87 taisen laatikon [, ] [, ] [0, ] sisällä (yhdensuuntaisprojektion normalisointimuunnoksen jälkeen vaihdamme kolmannen komponentin etumerkkiä). Pikselikoordinaatit saamme sopivalla muunnoksella kärkipisteiden x- ja y-koordinaateista. Tärkeä havainto on se, että z-koordinaatti kuvaa kärkipisteen etäisyyttä katselupisteestä. Tämä johtuu siitä, että normalisointimuunnos kuvaa kärkipisteiden z-koordinaatit monotonisesti: Jos piste p on maailmankoordinaatissa lähempänä kamerapistettä kuin piste p 2, kuvautuu piste p lähemmäs tasoa z = 0 kuin piste p 2. Tämä pitää paikkansa käytettiinpä sitten yhdensuuntaisprojektiota tai perspektiiviprojektiota. Perspektiiviprojektion tapauksessa kuvaus on tosin epälineaarinen mutta silti monotoninen, katso kuva Hyödynnämme tätä ominaisuutta seuraavassa. Alustamme ennen kuvan piirtoa z-puskuritaulukon kaikki alkiot arvolla. Tämä vastaa takatason z-koordinaattia kanonisessa kuvasärmiössä. Takatasohan rajaa liian kaukaiset monikulmiot pois piirrosta, joten sitä etäämpänä olevat monikulmiot eivät missään tapauksessa tule näkyviin. Kun käytämme liukuvan suoran menetelmää monikulmion rasteroinnissa, laskemme samalla vuorossa olevaa piirrettävää pikseliä varten suureen, joka kuvaa kyseistä pikseliä vastaavan monikulmion pintapisteen etäisyyttä katselupisteestä. Jos laskemamme pikselin etäisyys on pienempi kuin z-puskuritaulukon vastinalkioon taltioitu etäisyys, sytytämme vastaavan pikselin bittikarttakuvaan sopivan värisenä ja päivitämme samalla z-puskuritaulukon vastialkion arvoksi äsken laskemamme uuden ja pienemmän etäisyysarvon. Kysymys kuuluukin: Kuinka laskemme toimivalla tavalla kutakin pikseliä vastaavan etäisyysarvion testiä varten? Oletimme, että piirrettävät monikulmiot ovat tasomonikulmioita, joten kunkin monikulmion kaikki kärkipisteet sijaitsevat samalla hypertasolla. Tässä tapauksessa seuraava menetelmä toimii oikein. Liukuvan suoran menetelmässä käsittelemme ensimmäisessä vaiheessa monikulmion reunajanoja mielivaltaisessa järjestyksessä. Kulkiessamme kutakin reunajanaa y- suunnassa alhaalta ylöspäin muodostamme kutakin diskreettiä y-arvoa vastaten tietueen leikkauspistelistoihin. Näihin tietuiesiin talletimme aiemmin vain reunajanan ja vuorossa olevan x-akselin suuntaisen pikselisuoran leikkauspisteen x- pikselikoordinaatin. Lisäämme leikkauspistetietueeseen nyt uuden kentän, johon talletamme kyseistä leikkauspistettä vastaavan z-koordinaatin, joka alkeellisessa toteutuksessamme on reaalilukutyyppinen. Leikkauspistettä vastaava etäisyyttä katselupisteestä arvioiva z-koordinaatti saadaan lineaarisella interpoloinnilla janan päätepisteiden z-koordinaateista. Nämähän ovat tiedossa normalisointimuunnoksen (ja karteesiseen koordinaatistoon palaamisen) jälkeen. Merkitään nyt käsiteltävän janan alku- ja päätepisteen koordinaatteja kolmikoilla (x s,y s,z s ) ja (x e,y e,z e ), missä x s,y s, x e,y e Z ovat päätepis-

49 88 LUKU 4. NÄKYVYYS, REALISMI teiden pikselikoordinaatit ja z s,z e [0,] ovat päätepisteiden reaaliset z-koordinaatit. Pikseliriviä y s y < y e vastaavaan leikkauspistelistaan viedään nyt tietue, johon on määritetty leikkauspisteen x-koordinaatti kuten aiemmin. Tietueen z-koordinaattikenttään sijoitetaan päätepisteiden z-koordinaattien lineaarinen interpolantti z = (y e y)z s + (y y s )z e y e y s = z e + (z s z e ) y e y y e y s. (4.24) Menetelmän toisessa vaiheessa käymme läpi alkiopareittain leikkauspistelistat ja sytytämme pikselit. Ennen pikselin sytyttämistä testaamme kuitenkin pikselin näkyvyyden. Vertailuun tarvittava pikselin etäisyysestimaatti saadaan jälleen interpoloimalla leikkauspistetietueisiin vaiheessa talletettuja interpoloituja z-koordinaatteja. Käytämme kappaleen merkintöjä. Olkoon nyt käsittelyvuorossa leikkauspistepari P 2i+, P 2(i+), ja oletetaan, että olemme juuri tarkastelemassa pikseliä, jonka x-koordinaatti on x 0 = P 2i+.x x < P 2(i+).x = x. Interpoloimme vuorossa oleviin tietueisiin talletetut z-arvot jälleen lineaarisesti. Olkoot z 0 = P 2i+.z ja z = P 2(i+).z rasteroitavan jananpätkän päätepisteisiin aiemmin interpoloidut z-arvot. Pikseliä (x,y) vastaava z-arvo saadaan kaavalla z = (x x)z 0 + (x x 0 )z x x 0 = z + (z 0 z ) x x x x 0. (4.25) Saatua z-arvoa verrataan z-puskuriin aiemmin paikkaan (x, y) talletettuun z-arvoon ja jos uusi arvo on pienempi, sytytetään pikseli (x, y) kyseiseen monikulmioon liittyvällä värillä. Samalla z-puskuriin talletettu arvo korvataan uudella. Esitettyä interpolointitekniikkaa on havainnollistettu kuvassa 4.7. Kuvissa 4.8, 4.9 ja 4.0 on menetelmän toimintaa havainnollistettu tilanteessa, jossa rasteroidaan kolme monikulmiota. Vasemmanpuoleiset kuvat esittävät z-puskurin alkioiden arvoa harmaasävyinä (valkoinen = = kaukana, musta = 0 = lähellä) ja oikeanpuoleiset kuvat esittävät puolestaan kuvabittikarttaa kyseisen vaiheen jälkeen. Tämä kaksinkertainen interpolointi on z-puskurointimenetelmän perusidea. Tehokkaammissa toteutuksissa se toteutetaan pelkästään kokonaisluvuilla. Tämä tapahtuu siten, että diskretisoimme reaalilukuvälin [0,] annetulla osavälimäärällä. Tämä on tyypillisesti muotoa 2 k, missä k on käytetyn etumerkittömän kokonaislukutyypin bittiesityksen bittien lukumäärä. Tyypillisesti k = Kärkipisteiden z-koordinaatit skaalataan luvulla 2 k ja pyöristetään kokonaisluvuiksi. Tämän jälkeen interpolointikaavoissa (4.24) ja (4.25) kertolaskut muutetaan inkrementaalitekniikalla yhteenlaskuiksi.

50 4.. NÄKYVIEN PINTOJEN MÄÄRÄÄMINEN 89 y y za z z p z a = z + (z 2 z ) y y y y 2 z b = z + (z 3 z ) y y y y 3 z p = z b + (z a z b ) x b x x b x a zb pyyhkäisyviiva y y2 z2 y3 z3 Kuva 4.7: Z-puskurointi: bilineaarinen interpolointi.

51 90 LUKU 4. NÄKYVYYS, REALISMI Kuva 4.8: Z-puskurointi: Rasteroidaan kolmio, jonka kärkipisteiden koordinaatit ovat (2,2,0.8), (36,2,0.8) ja (6,30,0.). Syntyvä z-puskuri ja pikselikuva. Kuvassa pikselikoordinaatit ovat välillä [0,39] ja y-koordinaatti kasvaa alhaalta ylös. Kuva 4.9: Z-puskurointi: Rasteroidaan edelliseen kuvaan lisäksi kolmio, jonka kärkipisteiden koordinaatit ovat (2, 32, 0.5), (22, 2, 0.2) ja (28, 30, 0.5). Tämä kolmio menee ensimmäisen lävitse. Syntyvä z-puskuri ja pikselikuva.

52 4.. NÄKYVIEN PINTOJEN MÄÄRÄÄMINEN 9 Kuva 4.0: Z-puskurointi: Rasteroidaan edelliseen kuvaan lisäksi nelikulmio, jonka kärkipisteiden koordinaatit ovat (22, 4, 0.5), (36, 4, 0.5), (36, 36, 0.5) ja (22,35,0.5). Syntyvä z-puskuri ja pikselikuva. Z-puskurointimenetelmällä on useita etuja. Se on hyvin yksinkertainen menetelmä, joten on helppoa kehittää erikoisprosessoreja, jotka tukevat tätä menetelmää. Tällaisia erikoisprosessoreja on ollut jo pitkään käytössä 3d-työasemien ja PC-koneiden näytönohjaimissa. Laitetasolla toteutettuna se on myös erittäin nopea menetelmä mahdollistaen kymmenien miljoonien monikulmioiden piirron sekunnissa. Monikulmioita ei tarvitse syöttää piirtoa varten missään ennalta määrätyssä järjestyksessä saatika esijärjestää z-koordinaatin mukaan (vaikka joissakin toteutuksissa se voi tehostaa menetelmää). Vaikka näkyvyysongelma on luonteeltaan globaali, eli pahimmassa tapauksessa kaikki monikulmiot voisivat peittää syklisesti toisiaan, käsittelee z-puskurointitekniikka monikulmiot yksi kerrallaan ja kukin monikulmio tarvitsee käsitellä vain yhden kerran. Z-puskuritieto voidaan tallettaa pikselikuvien ohella tiedostoon. Tätä voi soveltaa siten, että samoin kamera-asetuksin muodostetaan useista eri näkymistä kuvia z-puskureineen. Myöhemmin näistä kuvista voidaan helposti koostaa uusi kuva, jossa eri näkymien objektit piirtyvät näkyvyysmielessä oikein suhteessa toisiinsa. Tämä voitaisiin toki saavuttaa yhdistämällä eri näkymiin liittyvät mallit toisiinsa, mutta se voi käytännössä olla hyvinkin hankalaa. Tämä tekniikka on erityisen sovelias sellaisissa tilanteissa joissa haluamme lisätä hyvin monimutkaiseen näkymään vähän kerrassaan uusia objekteja. Riittää kunhan lisättävät objektit käsitellään erikseen, pieninä kokonaisuuksina, ja niihin liittyvät pikselikuvat

53 92 LUKU 4. NÄKYVYYS, REALISMI ja z-puskurit talletetaan. Kuvia yhdisteltäessä verrataan eri kuvien z-puskureiden alkioita keskenään ja piirrettävä pikseli valitaan siitä kuvasta, jonka z-arvo on pienempi. Periaatteessa z-puskurointia voi menetelmänä soveltaa myös pintamalleihin, jotka eivät muodostu tasomonikulmioista. Riittää kunhan vain on käytössä joku keino määrätä pikselin z-arvo muodossa z = f (x,y). Z-puskuroinnilla on myös haittapuolensa. Ensimmäisen hankaluuden aiheuttaa perspektiiviprojektio. Perspektiivimuunnos ja sitä seurannut jakolasku palattaessa karteesisiin koordinaatteihin kuvaa z-komponentin uudeksi z-komponentiksi (z + k)/(z zk). Tämä aiheuttaa sen, että kaukana kamerasta (mutta silti takatason etupuolella) olevat objektit pakkautuvat hyvin lähelle toisiaan, joten syvyysinformaation tarkkuus heikkenee huomattavasti kaukaisille objekteille. Tästä saattaa aiheutua näkyviäkin kaukaisten objektien z-järjestysvirheitä lopputulokseen. Toinen samankaltainen ongelma tulee sellaisista monikulmioista, jotka ovat samassa tasossa ja menevät osittain päällekkäin. Menetelmä saattaa pyöristysvirheiden takia valita limittäisen osan pikseleissä näkyväksi kumman tahansa päällekkäisistä monikulmioista; lopputuloksessa monikulmiot aivan kuin sotivat siitä kumpi on näkyvä. Näitä ongelmia ei voi täysin ratkaista edes liukulukaritmetiikkaa käyttämällä. 4.2 Valaistuksen simulointi Nyt osaamme piirtää annetustä näkymästä rasterikuvan, jossa näkyviin piirtyy kussakin suunnassa lähin mallin pintapiste. Emme ole kuitenkaan puhuneet pintojen värittämisestä mitään täsmällistä. Olemme vain maininneet, että pikselit sytytetään sopivalla värillä väritettyinä. Realistisuuden lisäämiseksi haluamme mallittaa näkymään valonlähteitä. Tavoitteena on simuloida, ainakin alkeellisesti, kuinka valonlähteet valaisevat näkymän pintoja. Valonlähteet sijotetaan maailmankoordinaatistoon. Valaistusmalli tulee myös evaluoida käyttäen objektien maailmankoordinaatteja, muutoin lopputulos on omituisen näköinen. Valon kulkeutuminen on kuitenkin hyvin monimutkainen ilmiö mallittaa tarkasti. Ensinnäkin valo kulkeutuu valonlähteestä pinnan pisteeseen mahdollisesti useaa reittiä pitkin. Jos pinnan pisteestä on näköyhteys valonlähteeseen, kulkeutuu valoa suoraan kohteeseen. Objektien pinnat saattavat olla tavalla tai toisella heijastavia, joten valoa kulkeutuu näkymässä myös epäsuoraa reittiä pitkin heijastelemalla objektien välillä. Objektit saattavat myös olla liki täysin tai vain osittain läpinäkyviä, joten valo saattaa kulkea toisten objektien läpi matkallaan kyseiseen pinnan pisteeseen. Joidenkin objektien pinnat saattavat olla fluoresoivia, eli ne

54 4.2. VALAISTUKSEN SIMULOINTI 93 säteilevät valoa ympärilleen merkittävästi eri aallonpituisena kuin niitä valaiseva valo on. Esimerkkinä tästä on vaikkapa setelipaperi, joka hohtaa näkyvän valon aallonpituuksilla, kun sitä valaistaan ultraviolettivalolla jota ihmissilmä ei edes näe. Valaistusmallit luokitellaan lokaaleihin malleihin ja globaaleihin malleihin. Globaalit mallit pyrkivät huomioimaan objektien välisen vuorovaikutuksen valon kulkeutumisessa ja niiden avulla voidaan simuloida vaihtelevalla tarkkuudella pintojen epäsuoraa valaistusta mukaanlukien varjot. Globaalit mallit johtavat väistämättä menetelmiin, jotka vaativat paljon laskentaa. Ne eivät yleensä sovellukaan interaktiivisiin sovelluksiin, mutta niiden avulla pystytään tuottamaan hyvin realistisia lopputuloksia. Myöhemmin esittelemme niin kutsutun säteenseurantamenetelmän. Se kykenee mallittamaan melko hyvin valon kulkeutumisen näkymässä, jonka pinnat heijastelevat peilimäisesti tai jonka jotkin objektit ovat läpinäkyviä tai -kuultavia. Tässä kappaleessa keskitymme yksinkertaiseen lokaaliin valaistusmalliin. Lokaalit valaistusmallit nimensä mukaisesti jättävät huomiotta kaikki muut näkymän pintojen pisteet, kun sellaisten avulla määritellään tutkittavan pisteen kirkkaus. Ne siis keskittyvät suoraan valonlähteestä pinnan pisteeseen saapuvan valon heijastumiseen. Lokaalien mallien etuna on se, että ne ovat nopeita laskea, niiden haittana on puolestaan se, että lopputulos on epärealistisempi. Lokaalien mallien avulla ei voida määritellä toisten objektien aiheuttamia varjoja, objektin epäsuoraa valaistusta, valon taittumista läpinäkyvien objektien pinnasta ja tilavuusmitallisia ilmiöitä kuten sumua. Valaistusmallin valinta onkin tehtävä sen mukaan kuinka kauan on aikaa odotella kuvan valmistumista. Reaaliaikaisia animaatioita tuotettaessa täytyy tyytyä yksinkertaisempiin malleihin. Jos tehdään elokuvien erikoistehosteita on aikaa ja resursseja käytettävissä huomattavasti enemmän, joten valaistusmallit voidaan valita niin tarkoiksi kuin kirjallisuudesta löytyy Valonlähteet Yksinkertaisin mahdollinen valonlähde on pistemäinen. Tämä tarkoittaa sitä, että annettuun maailmankoordinaatiston pisteeseen on sijoitettu yhdeksi pisteeksi kutistunut lamppu, joka säteilee joka suuntaan annetulla intensiteetillä annetun väristä valoa. Käyttäjä parametrisoi valonlähteen käyttäen vähintään kuutta parametria: Ensimmäiset kolme ovat valonlähteen sijaintipaikan kolme maailmankoordinaattia. Toisella lukukolmikolla esitetään valonlähteen intensiteetti. Tyypillisesti tähän käytetään RGB-mallia (RGB = red, green, blue). Valon värisävy ja intensiteetti ilmoitetaan kolmella reaaliluvulla r, g, b [0, ]. RGB-värikolmikko

55 94 LUKU 4. NÄKYVYYS, REALISMI (0,0,0) tarkoittaa täysin mustaa väriä, (,,) valkoista (,0,0) kirkkaan punaista ja niin edelleen. RGB-malli on ihmissilmälle luonnollinen, sillä silmässä värejä aistii kolmen tyyppisiä aistinsoluja, jotka ovat herkistyneet lähelle punaista, vihreää ja sinistä valon aallonpituutta. (Joidenkin eläinten silmin katsottuna värimallilla tuotetut kuvat olisivat varsin epäluonnollisen näköisiä). Toinen myös yksinkertainen valonlähde on suunnattu valo. Tämä tarkoittaa sitä, että valonsäteet saapuvat samansuuntaisina jokaiseen näkymän pisteeseen. Tämä on varsin hyvä malli esimerkiksi auringon valolle. Aurinko on niin etäällä, että riittää kohtuullisella tarkkuudella olettaa valon saapuvan joka paikkaan samansuuntaisena. Tällainen valonlähde ilmoitetaan myös ainakin kuudella parametrilla: Valon suuntavektorilla ja valon intensiteetillä ja värillä. Käytämme aluksi vain näitä yksinkertaisia valonlähdetyyppejä. Valaistusmallin esittelyn jälkeen tarkastelemme vielä kuinka voimme mallittaa spottilampun kaltaisia valonlähteitä. Näillä on tietty pääsuunta, johon valonlähde säteilee voimakkaimmin. Valon intensiteetti alenee nopeasti, kun poiketaan tästä suunnasta Yksinkertainen ei-fysikaalinen lokaali valaistusmalli Käytämme jatkossa monikulmiografiikan piirrossa yksinkertaista kolmesta termistä koostuvaa mallia, joka kirjallisuudessa tunnetaan Phongin mallina. Se ei ole fysikaalisen tarkka, mutta tuottaa useisiin tarpeisiin kohtuullisen hyvän arvion pintojen kirkkaudesta. Mallissa objektien pinnoille (käytännössä monikulmiokohtaisesti) määritellään kolme erilaista heijastustapaa: Yleisvalon heijastus (ambient reflection), diffuusi heijastus (englanniksi diffuse reflection) ja peilimäinen heijastus (specular reflection). Vaikka malli ei pohjaudukaan täsmällisesti fysiikkaan, pyrkii se kuitenkin simuloimaan muutamia tärkeimmistä havaittavista valon ja objektien vuorovaikutuksista. Tärkeintä siinä on kuitenkin se, että se on laskennallisesti kevyt, joten puutteistaan ja liki kolmen vuosikymmenen iästään huolimatta se on vieläkin yleisimmin käytetty malli grafiikkasovelluksissa ja nykyään se on jo laitteistotasollakin tuettu. Ensimmäinen ja laskennallisesti kaikkein yksinkertaisin mallin termi on yleisvalon heijastuminen. Tämä termi on kaikista epäfysikaalisin mallin termeistä. Sen avulla pyritään täysin heuristisesti huomioimaan objektien epäsuora valaistus. Ilman tätä termiä lopputuloksen kontrasti olisi kuitenkin liian suuri. Maailmankoordinaatiston jokaista pistettä ajatellaan valaistun vakiovoimakkuudella annetun sävyisellä valolla. Objektien pintamonikulmioille määritellään kuinka suuren osuuden kyseinen monikulmio tästä yleisvalosta heijastaa. Yleisvalon heijastuminen on vakiota riippumatta objektin tai katselijan sijainnista.

56 4.2. VALAISTUKSEN SIMULOINTI 95 Yleisvalaistuksen intensiteetti ilmoitetaan kolmella reaaliluvulla, valon värin RGB-kolmikolla, ja sitä merkitään termillä I a,λ, missä aallonpituusparametri λ saa kolme eri arvoa λ = r, g, b. Pintamonikulmiokohtaisesti määritellään kolme yleisvalon heijastuskerrointa, yksi kullekin aallonpituudelle λ, ja niitä merkitään termein k a,λ [0,]. Näin saamme muodostettua alkeellisimman mallin pinnan pisteen kirkkaudelle: I λ = I a,λ k a,λ. (4.26) Käyttäjälle on tarjolla seuraavat säätömahdollisuudet: Käyttäjä voi muunnella yleisvalon (joka siis on vakio yli näkymän) intensiteetin RGB-kolmikkoa I a,λ. Lisäksi käyttäjä voi muunnella objektien pintojen yleisvalaistuksen heijastuskertoimia k a,λ. Käytännössä heijastuskertoimet määritellään pintamonikulmiokohtaisesti (tai tekstuurien avulla). Kuvassa 4. on esitetty lopputulos, johon päästään pelkän yleisvalon käytöllä. Kuvan objekti on mallitettu käyttäen noin pintamonikulmiota. Yleisvalaistuksen heijastuskertoimet määräytyvät monikulmiokohtaisesti niin kutsutun texture mapping tekniikan avulla (tästä tarkemmin myöhemmin). Kuvan esimerkissä yleisvalon intensiteetti oli asetettu hyvin korkeaksi ja väriltään se oli valkoista. Pintojen väri määräytyy siis pelkästään heijastuskertoimien k a,λ vaikutuksesta. Malli on vielä liian yksinkertainen, jotta sillä saisi aikaan kelvollisia tuloksia. Lisäämme seuraavaksi termiksi pintojen diffuusin heijastuksen. Jos objekti on mattapintainen, heijastuu valo sen pinnasta noudattaen Lambertin kosinilakia. Tämä tarkoittaa sellaista valon heijastumista, joka näyttää vakiolta katsottiinpa pinnan pistettä mistä suunnasta tahansa, eli pinta heijastaa valoa yhtä paljon kaikkiin suuntiin pinnan tangenttitason ulkonormaalin puoleisessa puoliavaruudessa. Pinnan pisteen intensiteetti on kuitenkin sitä voimakkaampi mitä kohtisuorempaan valo saapuu valonlähteestä pisteeseen. Jos valo kulkee pinnan suuntaisesti, ei pinta heijasta valoa lainkaan. Malli perustuu kuvan 4.2 geometriseen tulkintaan. Siinä on esitetty vektorin l suuntainen ympyräpohjainen sylinteri, joka leikkaa tasoa, jonka normaalivektori on n. Jos sylinterin poikkileikkauspinta-ala on A, on sen ja tason leikkausellipsin pinta-ala A/cos(θ), missä θ on se kulma, joka muodostuu normaalivektorin ja sylinterin keskilinjan suuntavektorin välille. Jos sylinterin poikkileikkauspintaalaksi valitaan A = ja kuvittelemme sylinteriä pitkin virtaavaan vakionopeudella ja vakiotiheydellä pieniä partikkeleja kohti tasoa, kohtaa poikkileikkausellipsin mielivaltaisen yksikköpinta-alaisen osajoukon partikkelivirrasta osuus cos θ. Voimme mieltää partikkelit fotoneiksi, jotka saapuvat valonlähteestä pinnalle. Näin

57 96 LUKU 4. NÄKYVYYS, REALISMI Kuva 4.: Monikulmio-objekti valaistuna yleisvalolla. n l q pinta ala=a pinta ala=a/cosq Kuva 4.2: Lambertin mallin johtaminen.

58 4.2. VALAISTUKSEN SIMULOINTI 97 ollen pinnan pisteen kirkkaudelle saamme täydennetyn mallin I λ = I a,λ k a,λ + I p,λ k d,λ max(cosθ,0) = I a,λ k a,λ + I p,λ k d,λ max(( n, l),0), (4.27) missä n on pinnan yksikköulkonormaalivektori tarkasteltavassa pisteessä ja l on yksikkövektori, joka osoittaa suunnan tarkasteltavasta pinnan pisteestä valonlähteeseen. Pistemäisen tai suunnatun valonlähteen intensiteetin ja värin ilmaisee lukukolmikko I p,λ. Vektori l voidaan tietenkin muodostaa helposti, kun tunnemme pinnan pisteen maailmankoordinaatit ja valonlähteen paikan. Suunnatun valonlähteen tapauksessa vektori l on valon suuntavektorin vastavektori (olettaen tietenkin, että valon suuntavektori kuvaa valon kulkusuuntaa). Maksimilausekkeen tarkoituksena on poistaa sellaiset tilanteet, joissa valonlähde sijaitsee siinä puoliavaruudessa joka jää pinnan sisäpuolelle. Tässä vaiheessa oletamme vielä, ettei valo kulkeudu kappaleiden lävitse niiden pinnoille. Edellinen malli ei vielä ole aivan tyydyttävä. Se ei huomioi valonlähteen annettulle pinta-alalle säteilevän energiamäärän vaimenemista pinnan ja valonlähteen etäisyyttä kasvatettaessa. Tästä aiheutuu se epätoivottu ilmiö, että kaksi pintaa jotka ovat samansuuntaiset näyttävät yhtä kirkkailta vaikka toinen olisi huomattavasti lähempänä valonlähdettä kuin toinen. Kaikki vapaassa tilassa sijaitsevasta pistemäisestä valonlähteestä säteilevä energia kulkee tietyllä etäisyydellä d sen pallon pinnan läpi, jonka keskipiste on valonlähde ja säde on d. Tämän pallon pinnan pinta-ala on 4πd 2, joten energiamäärä per yksikköpinta-ala pienenee suhteessa etäisyyden neliöön. Tämä voitaisiin huomioida edellisessä mallissa skaalaamalla pistemäisen valolähteen intensiteettiä kertoimella f att = /(d l ) 2, (att = attenuation = vaimeneminen), missä d l on etäisyys valonlähteestä tarkasteltavaan pinnan pisteeseen. Edellinen kaava aiheuttaa kuitenkin epäluonnollisen tylyn lopputuloksen. Tämä aiheutuu siitä, että luonnossa emme näe yleensä objekteja, jotka on valaistu pistemäisillä valonlähteillä. Käytämmekin sen sijasta heuristista kaavaa vaimenemiskertoimelle. Malliksi saamme I λ = I a,λ k a,λ + f att I p,λ k d,λ max(( n, l),0), (4.28) missä ( f att = min c + c 2 d l + c 3 dl 2 ),, (4.29) ja kertoimet c, c 2 ja c 3 ovat kokeellisesti valittuja vakioita.

59 98 LUKU 4. NÄKYVYYS, REALISMI Kuva 4.3: Monikulmio-objekti valaistuna yleisvalolla ja kolmella pistemäisellä valonlähteellä. Valaistusmalli on diffuusilla heijastuksella täydennetty yleisvalon heijastuminen. Kun sovellamme edellisen esimerkin objektien valaisuun täydennettyä mallia (4.28), päädymme kuvan 4.3 lopputulokseen. Tässä esimerkissä sekä yleisvalaistuksen että diffuusin heijastuksen kertoimet valittiin samoiksi ja ne muodostettiin samoin kuin aiemmin. Yleisvalaistuksen intensiteettiä kuitenkin pienennettiin huomattavasti aiempaan kuvaan verrattuna. Yleisvalaistuksen lisäksi näkymään sijoitettiin kolme valkoista valoa säteilevää pistemäistä valonlähdettä. Vaimennusvakioiksi valittiin kaikille valonlähteille c =, c 2 = 0.06 ja c 3 = Valaistusmallimme on lähes valmis. Täydennämme siihen vielä peiliheijastustermin. Peilimäiselle heijastukselle on tyypillistä se, että se on suunnattua ja se riippuu sekä katselupisteestä että valonlähteen paikasta. Pääheijastussuunta saadaan peilaamalla valonsäteen tulosuunta pinnan normaalivektorin suhteen. Peiliheijastussuuntavektori r on siis vektori, joka on samassa tasossa kuin valonlähteen suuntavektori l ja pinnan ulkonormaalivektori n. Vektori r on vektorin l peilikuva

60 4.2. VALAISTUKSEN SIMULOINTI 99 2(n,l)n r=2(n,l)n l n l q q r l (n,l)n r Kuva 4.4: Pääheijastussuunta saadaan kaavalla r = 2( n, l) n l. n l q q r a v Kuva 4.5: Phongin valaistusmalli, merkinnät. peilattaessa vektori l normaalivektorin n suuntaisen suoran yli. Pääheijastussuunta saadaan määriteltyä kaavalla r = 2( n, l) n l, katso kuva 4.4. Määrittelemme lisäksi suuntavektorin v, joka osoittaa tarkasteltavasta pinnan pisteestä katselupistettä kohti. Olkoon vektorien r ja v välinen kulma α, katso kuva 4.5. Katselupisteen suuntavektori saadaan laskettua, koska tunnemme kameran paikan maailmankoordinaatistossa. Jos pinta heijastaa täydellisen peilimäisesti, näemme valonlähteen spotin pinnalla ainoastaan, jos α = 0. Todenmukaisemman heijastuksen tapauksessa peilimäisesti heijastuvan valon määrä vähenee kulman α kasvaessa. Tämä efekti mallitetaan kulman α kosinin avulla. Skaalaamme peilimäisesti heijastuvan valon määrää termillä max(cosα,0) n = max(( r, v),0) n. Tässä r ja v on oletettu skaalatun yksikkövektoreiksi. Havaitsemme, että mitä suurempi eksponentti n on, sitä nopeammin edellinen lauseke vaimenee kohti nollaa kun α kasvaa, katso kuva 4.6

61 200 LUKU 4. NÄKYVYYS, REALISMI cos(x) cos(x)**2 cos(x)**4 cos(x)** Kuva 4.6: Phongin valaistusmalli: funktion cos n α käyttäytyminen. Lopullinen valaistusmallimme on I λ = I a,λ k a,λ + f att I p,λ (k d,λ max(( n, l),0) + k s,λ max(( r, v),0) n), (4.30) missä termit k s,λ ja n ovat pinnan peiliheijastuskertoimet ja peiliheijastuseksponentti. Saamme mallista ehkä helpommin säädeltävän, kun määrittelemme objektin pinnan diffuusin värin O d,λ ja peiliheijastusvärin O s,λ. Nämä molemmat esitetään RGB-kolmikoina. Lisäksi esittelemme kolme heijastuskerrointa: yleisvalaistuksen heijastuskertoimen k a [0,], diffuusin heijastuskertoimen k d [0,] ja peiliheijastuskertoimen k s [0,]. Näillä voidaan helpohkosti säädellä objektin pinnan heijastusominaisuuksia. Näillä merkinnöillä malliksi tulee I λ = I a,λ k a O d,λ + f att I p,λ (k d O d,λ max(( n, l),0) + k s O s,λ max(( r, v),0) n). (4.3) Syy siihen, että esittelimme kaksi pintaväriä, toisen diffuusille ja toisen peiliheijastukselle (kappaleen oletetaan heijastavan yleisvaloa saman värisenä kuin se diffuusisti heijastaa), on se, että eräillä materiaaleilla peiliheijastusväri on eri kuin sen diffuusi väri. Esimerkiksi muoveista valonlähteet heijastuvat peilimäisesti liki alkuperäisen värisinä, kun metalleille on tyypillistä, että valonlähteen peilimäisen heijastuksen väri on lähellä metallin omaa väriä. Nämä säätöparametrit talletetaan monikulmiotietorakenteisiin muun datan ohessa. Periaatteessa kaikille objektin pintamonikulmioille voidaan tallettaa kaikki parametrit k a, O d,λ, k d, k s, O s,λ ja eksponentti n, tai vain osa niistä, jolloin muut ovat globaaleja kyseiselle objektille.

62 4.2. VALAISTUKSEN SIMULOINTI 20 Jos näkymässä on useita pistemäisiä valonlähteitä, summataan kaikkien niiden pinnan pisteelle määräämät intensiteettiarvot yhteen. Tapauksessa jolloin näkymässä on n l valonlähdettä, intensiteetti määrätään kaavalla I λ =I a,λ k a O d,λ + n l ( ( fatti j j p,λ k d O d,λ max(( n, l j ),0) + k s O s,λ max(( r j, v),0) n)), j= (4.32) missä f j att on valonlähteen j vaimenemiskerroin, I j p,λ sen intensitetti ja l j ja r j ovat valonlähteen suunta- ja pääheijastussuuntavektorit (yksikkövektoreita). Kaavaa (4.32) kutsutaan Phongin lokaaliksi valaistusmalliksi. Heijastustermin vaikutusta on yritetty havainnollistaa kuvasarjassa 4.7. Siinä on esitetty monikulmio-objekti, jota valaistaan kahdella kiinteällä pistemäisellä valonlähteellä ja jonka asentoa muutetaan hieman kuvasta toiseen. Katselupiste pysyy aina samana. Tällöinhän objektin pinnan pisteiden ulkonormaali-, heijastusja valonsuuntavektorit muuttuvat. Tällöin tietyssä asennoissa peiliheijastuminen on mahdollista Warnin spottivalomalli Äsken käsitellyssä Phongin valaistusmallissa käytettyjä ideoita voidaan soveltaa mallitettaessa spottimaisia valonlähteitä. Tällaisille valonlähteille on tyypillistä, että ne säteilevät voimakkaimmin tiettyyn pääsuuntaan ja säteilyintesiteetti vaimenee nopeasti, kun poiketaan pääsuunnasta. Määrätään valonlähteen paikan ja värin lisäksi valonlähteen pääsuunta l, johon valonlähde voimakkaimmin säteilee, katso kuva 4.8. Varioidaan valonlähteen intensiteettiä sen mukaan kuinka suuren kulman β pinnan pisteestä P valonlähteeseen kulkeva suora muodostaa valonlähteen pääsuunnan l kanssa. Tämä mallitetaan Phongin peiliheijastuksen kaltaisella kosinilailla: Pisteen P intensiteetti spottilampun valaisemana aallonpituudella λ on I λ =I aλ k a O dλ + f att I pλ max(cosβ,0) p (k d O dλ max(cosθ,0)+ k s O sλ max(cosα,0) n ) =I aλ k a O dλ + f att I pλ max(( l, l ),0) p (k d O dλ max(( n, l),0)+ k s O sλ max(( r, v),0) n ), (4.33) olettaen, että l, l, n, r ja v on skaalattu yksikkövektoreiksi. Lausekkeissa esiintyvistä kosineista tai sisätuloista kelpuutetaan jälleen vain ei-negatiiviset arvot.

63 202 LUKU 4. NÄKYVYYS, REALISMI Kuva 4.7: Phongin valaistusmalli: Heijastustermin max(( r, v),0) n vaikutus. Kuvan objektia on valaistu kahdella pistemäisellä valonlähteellä, joista toinen heijastuu peilimäisesti, kun objekti on sopivassa asennossa (varjot on määrätty kappaleen menetelmällä). Negatiiviset kosinilausekkeet tai sisätulot korvataan nollalla. Ei-negatiivista termiä p muuttelemalla saadaan säädettyä valokeilan leveyttä.mitä suurempi on termi p, sen kapeampi on kyseisen lampun valokeila. Erityisesti asettamalla p = 0 saadaan tavallinen pistemäinen valonlähde, joka säteilee yhtä paljon joka suuntaan. Toinen tulkinta täsmälleen samalle efektille on kuvassa 4.9. Siinä sovelletaan Phongin peiliheijastusmallia kuvitteelliselle peilille, joka heijastaa lampusta lähtevän valon valaistaville objekteille Monikulmioiden sävytys Esitellään seuraavaksi, kuinka monikulmioita sävytetään värisävyillä. Äsken esitetyllä Phongin valaistusmallilla voimme laskea monikulmion pinnan mielivaltaisen pisteen intensiteetin, kunhan tunnemme maailmankoordinaateissa pinnan pisteen paikan, ulkonormaalivektorin, valonlähteiden paikat ja katselupisteen. Li-

64 4.2. VALAISTUKSEN SIMULOINTI 203 n l b l q q a r v P Kuva 4.8: Warnin spottilamppumalli, merkinnät. Peili N L b L Lamppu q P q a R V Kuva 4.9: Warnin spottilamppumalli, ekvivalentti tulkinta. Valonlähteen säteilemä valon heijastetaan kuvitteellisen peilin kautta näkymään ja peiliheijastus mallitetaan kuten Phongin mallissa.

65 204 LUKU 4. NÄKYVYYS, REALISMI säksi tarvitsemme toki heijastusvärit ja -kertoimet, mutta nämä saamme monikulmiomallin tietorakenteista. Paloittain vakio sävytys Yksinkertaisin tekniikka sävyttää monikulmio on määrätä valaistusmallin avulla koko monikulmion väri käyttäen valaistusmallin evaluoinnissa monikulmion ulkonormaalivektoria ja yhtä monikulmion pinnan pistettä, esimerkiksi painopistettä. Tämä johtaa siihen, että koko monikulmio sävytetään sillä värisävyllä, jonka valaistusmalli tässä pisteessä palauttaa. Täten lopputuloskuvassa pinnan värisävyt ovat paloittain vakioita. Tämä ei yleensä ole tyydyttävä ratkaisu paitsi ehkä nopeutensa ansiosta. Paremman lopputuloksen saavuttamiseksi pyrimme liu uttamaan värisävyt pehmeästi yli monikulmioiden. Tätä varten tarkastellaan ensin, kuinka monikulmiokohtaisia normaalivektoreita voidaan manipuloida, jotta voimme (ainakin visuaalisesti) esittää sileitä muotoja tasomonikulmioilla. Normaalivektorien määrääminen monikulmion kärkipisteille Kuvassa 4.20 on esitetty monikulmiopinta, jonka jokaiselle monikulmiolle on määrätty oma ulkonormaalivektorinsa. Jos oletamme, että pinta jota monikulmiot mallittavat on oikeasti sileä, voimme laskea kärkipisteille uudet normaalivektorit keskiarvoistamalla. Kullekin kärkipisteelle v määrätään normaalivektori n v kaavalla n v = k v i= n v i k v i= n v i, (4.34) missä k v on niiden monikulmioiden lukumääärä, joiden kärkipiste v on. Vektorit n vi ovat puolestaan näiden monikulmioiden lokaalit ulkonormaalisuuntavektorit. Kärkipisteitä vastaavat keskiarvoistetut normaalivektorit voidaan laskea etukäteen ja tallettaa monikulmiomallin yhteyteen. Vaihtoehtoisesti voidaan käyttää painotettua keskiarvoa. Tällöin kunkin monikulmion normaalivektoria painotetaan kyseisen monikulmion pinta-alalla A vi ja tulokseksi saadaan n v = ( ) kv i= A v i n vi / k v i= A v i ). (4.35) ( kv i= A v i n vi / k v i= A v i

66 4.2. VALAISTUKSEN SIMULOINTI 205 nv3 nv nv nv4 Kuva 4.20: Normaalivektorien määrääminen kärkipisteissä keskiarvoistamalla. nv2 n, na nb nc n,2 ne n2 c e 2 nd d f a b nf Kuva 4.2: Normaalivektorien määrääminen kärkipisteissä, jos mallitettavassa pinnassa on epäsileitä kohtia.

67 206 LUKU 4. NÄKYVYYS, REALISMI Edellä mainittu keskiarvoistus on kuitenkin syytä tehdä varoen. Jos mallitettavan objektin pinnassa on oikeasti teräviä särmiä, siloittaa järjestelmällinen keskiarvoistus nämä pois. Tarkastellaan kuvassa 4.2 esitettyä monikulmio-objektia. Se esittäköön ympyräpohjaista sylinteriä, jota approksimoidaan tasomonikulmioilla. Haluamme, että tuloksena saadaan kuva, jossa sylinterin vaippa näyttää sileältä, mutta vaipan ja päätyjen rajakohta erottuu terävänä kulmana. Selvästikin tarvitsemme teräviin särmiin liittyviin kärkipisteisiin useampia normaalivektoreita. Esimerkiksi monikulmiot a, b, c ja d jakavat kaikki kärkipisteen. Monikulmiot a ja b mallittavat sylinterin päätyä ja c ja d puolestaan sen vaippaa. Liitetään kärkipisteeseen kaksi normaalivektoria n, ja n,2. Näistä n, lasketaan keskiarvoistaen monikulmioiden a ja b lokaalit normaalivektorit ja n,2 puolestaan saadaan keskiarvona monikulmioiden c ja d lokaaleista normaalivektoreista: n, = ( n a + n b )/2 ( n a + n b )/2, n,2 = ( n c + n d )/2 ( n c + n d )/2. (4.36) Sävytettäessä monikulmioita a ja b kappaleen tai kappaleen menetelmillä, käytetään kärkipisteessä normaalivektorina vektoria n,. Vastaavasti monikulmiota c ja d sävytettäessä käytetään pisteessä vektoria n,2. Kärkipiste 2 sijaitsee sylinterin vaipalla, joten siihen liitettävä normaalivektori saadaan aiemmin esitetyllä tavalla: n 2 = ( n c + n d + n e + n f )/4 ( n c + n d + n e + n f )/4. (4.37) Kärkipisteittäiset normaalivektorit lasketaan etukäteen primitiiviobjekteille mallituskoordinaatistossa ja talletetaan monikulmiotietorakenteisiin. Tämän voi tehdä esimerkiksi siten, että monikulmiotietorakenteeseen lisätään kärkipisteosoitinlistan lisäksi lista osoittimista kärkipisteisiin liitettävistä normaalivektoreista. Tässä voi käyttää jopa pakattua esitystä, jossa jokainen erilainen normaalivektori talletetaan vain kerran. Näin on tehty kuvassa 4.22, jossa on esitetty yksikkökuutiolle sopivat tietorakenteet. Kuution sivut on mallitettu nelikulmioilla, ja kunkin sivutahkonelikulmion kärkipisteisiin liittyy sama normaalivektori. Tämä on talletettu muistiin ainoastaan kerran. Tämän kaltaisilla tietorakenteilla voimme toteuttaa monikulmioiden sävytyksen hienostuneemmilla tavoilla Gouraudin sävytys: Kärkipisteittäisten RGB-arvojen interpolointi Niin kutsutussa Gouraudin sävytyksessä lasketaan ensin valaistusmallin avulla piirrettävän monikulmion kärkipisteiden värisävyt, jotka ilmoitetaan kärkipisteit-

68 4.2. VALAISTUKSEN SIMULOINTI (0,,) 7 (,,) 5 (0,0,) 6 (,0,) 4 (0,,0) 3 (,,0) x y z w Kärkipistelista "paikkatieto" n p p2 p3 p4 n n2 n3 n4 x y z w Monikulmiolista "topologiatieto" Normaalivektorilista "suuntatieto" (0,0,0) 2 (,0,0) Kuva 4.22: Yksikkökuution esittämiseen sopivat tietorakenteet valaistusta varten. Kuvassa ei ole esitetty monikulmiokohtaisia valaistusmallin kertoimia. täisinä RGB-kolmikoina. Valaistusmallia evaluoitaessa käytetään edellä esitettyjen tietorakenteiden avulla löydettäviä normaalivektoreita, jotka on kuvattu maailmankoordinaatistoon. Kärkipisteiden paikkatieto, valonlähteiden paikat sekä katselupiste tulee myös ilmoittaa maailmankoordinaateissa. Kärkipisteiden maailmankoordinaatit saadaan vaikkapa soveltamalla kärkipisteiden kanoonisiin koordinaatteihin normalisointimuunnoksen käänteismuunnosta (harjoitustehtävä: Mikä se on?), jos objekti on kuvattu suoraan hierarkisen mallin mallitusmuunnoksen ja normalisointimuunnoksen yhdisteellä mallituskoordinaatistosta kanoniseen koordinaatistoon. Kuvaus takaisin maailmankoordinaatistoon tarvitsee tietenkin tehdä vain niille monikulmioille, jotka ovat läpäisseet konservatiivisen näkyvyystestin. Piirrettäessä monikulmiota rasteriin liukuvan suoran menetelmällä interpoloidaan menetelmän yhteydessä kärkipisteiden RGB-arvoja, aivan kuten interpoloimme kärkipisteiden z-koordinaatteja z-puskurimenetelmässä. Merkitään vaiheessa yksi vuorossa olevan reunajanan päätekärkipisteiden väriä kolmikoilla c s = (r s,g s,b s ) ja c e = (r e,g e,b e ). Listarakenteeseen vietävään tietueeseen lisätään värivektorin sisältävä kenttä c, johon lasketaan pikseliriviä y s y < y e vastaava värivektorien c s ja c e lineaarinen interpolantti c = (y e y) c s + (y y s ) c e y e y s = c e + ( c s c e ) y e y y e y s. (4.38) Menetelmän toisessa vaiheessa interpoloimme jälleen lineaarisesti leikkauspistetietueisiin talletettuja RGB-kolmikoita. Olkoot c 0 = P 2i+. c ja c = P 2(i+). c rasteroitavan jananpätkän päätepisteisiin aiemmin interpoloidut RGB-arvot. Pik-

69 208 LUKU 4. NÄKYVYYS, REALISMI Kuva 4.23: Gouraudin sävytys toimii huonosti ei-konvekseilla monikulmioilla. seliä (x,y), x 0 x < x vastaava RGB-arvo c saadaan kaavalla c = (x x) c 0 + (x x 0 ) c x x 0 = c + ( c 0 c ) x x x x 0 (4.39) ja pikseli (x, y) sytytetään värillä c, jos z-puskurimenetelmä määrää sen näkyväksi. Väriarvojen kaksinkertaisella lineaarisella interpolaatiolle on se haittapuoli, ettei se toimi tyydyttävästi kuin konvekseja monikulmioita sävytettäessä, katso kuva Menetelmä aiheuttaa ongelmia myös konvekseille monikulmioille. Esimerkkinä tästä on rasteroitu nelikulmio kahdessa asennossa, jotka poikkeavat kierron π/2 verran toisistaan, katso kuva Esimerkkitapaus voisi tulla esiin vaikkapa muutettaessa yläsuuntavektorin suuntaa kameraparametreissa. Ensimmäisessä asennossa monikulmion keskipiste värittyy tummaksi ja toisessa vaaleaksi. Jos nelikulmio pilkotaan kahdeksi kolmioksi kuten kuvassa 4.25, ei ongelmia ilmene Phongin sävytys: normaalivektorien ja kärkipisteiden maailmankoordinaattien interpolointi Gouraudin sävytyksessä valaistusmalli evaluoitiin vain piirrettävien monikulmioiden kärkipisteissä ja saatuja värisävyjä interpoloitiin lineaarisesti yli piirrettävän monikulmion. Gouraudin sävytys saattaa kuitenkin hukata kiinnostavia ilmiöitä,

70 4.2. VALAISTUKSEN SIMULOINTI 209 Kuva 4.24: Gouraudin sävytys ei ole kiertoinvariantti nelikulmioille. Kuva 4.25: Piirrettäessä nelikulmio kahtena kolmiona ei ongelmia ilmene.

71 20 LUKU 4. NÄKYVYYS, REALISMI valonlähde katselupiste valonlähde katselupiste r n l v l2 v2 n2 n lp np rp=vp n2 kärkipiste kärkipiste 2 r2 piste p Kuva 4.26: Gouraudin sävytys evaluoi valaistusmallia vain kärkipisteissä, joissa valonlähde ei heijasta peilimäisesti. Keskellä pintaa oleva peiliheijastuspiste ei piirry lopputulokseen. joita Phongin valaistusmalli simuloi. Esimerkkinä tästä on kuvassa 4.26 esitetty tilanne, jossa pinnalla näkyvä peiliheijastusspotti jää piirtymättä lopputulokseen. Tämä johtuu siitä, että kulmat jotka muodostuvat katselusuunta- ja peiliheijastussuuntavektorien välille ovat liian suuria. Jos pinnan oletetaan olevan sileä, tulee kyetä määräämään normaalivektorit eri pinnan pisteissä siten, että ne muuttuvat sileästi yli pinnan. Tällöin kuvan 4.26 oikeanpuoleisessa tapauksessa havaittaisiin valonlähteen peiliheijastus pisteessä p. Phongin sävytyksessä interpoloidaankin sekä normaalivektoreita, että pinnan pisteen maailmankoordinaatteja. Jälkimmäisiä tarvitaan heijastussuuntavektorin r määrämiseksi Phongin valaistusmallia varten. Interpolointitekniikkana käytetään jälleen kaksivaiheista lineaarista interpolointia liukuvan suoran menetelmässä. Menetelmää varten tarvitsemme kärkipisteittäiset normaalivektorit ja maailmankoordinaatit. Ne voidaan pakata yhteen kuusiulotteiseen vektoriin per kärkipiste. Näitä vektoreita interpoloidaan kuten värivektoria c kaavoissa (4.38) ja (4.39). Jos z-puskurimenetelmä määrää vuorossa olevan pikseli (x,y) näkyväksi, lasketaan sen värisävy ja intensiteetti evaluoimalla Phongin valaistusmalli käyttäen interpoloituja normaaleja ja maailmankoordinaatteja. Phongin sävytys on siis laskennallisesti huomattavasti raskaampi toteuttaa kuin Gouraudin sävytys. Tämä johtuu tietenkin siitä, että sävytysmenetelmässä pitää interpoloida suurempidimensioisia vektoreita ja valaistusmalli pitää evaluoida erikseen jokaiselle piirrettäväksi määräytyvälle pikselille. Valaistusmallin evaluointia varten tulee pikselikohtaisesti laskea valonsuunta-, katselusuunta- ja peiliheijastussuuntavektorit.

72 4.2. VALAISTUKSEN SIMULOINTI 2 Oikeat maailmankoordinaatit Projektiokeskus Interpoloidut maailmankoordinaatit Kuva 4.27: Lineaarinen pikselikoordinaattien määräämä interpolointi antaa väärät maailmankoordinaatit. Huomautus perspektiiviprojektiosta Edellä esitetyssä Phongin sävytyksessä interpoloitiin bilineaarisesti mm. pisteiden maailmankoordinaatteja. Bilineaarinen interpolointi tehtiin kuitenkin pinnan projektion määräämänä pikselikoordinaattien avulla. Jos käytetään perspektiiviprojektiota, edellinen interpolointitekniikka ei yleensä anna niiden pinnan pisteiden maailmankoordinaatteja, jotka projisoituvat kyseisiksi pikseleiksi perspektiiviprojektiossa. Tätä on yritetty havainnollistaa kuvassa Muistaen kappaleen 4..3 alkuhuomatuksen, havaitsemme, että seuraava tekniikka toimii oikein. Sisältäkööt vektorit x k i = (x i,y i,z i,) T tarkasteltavan monikulmion kärkipisteiden koordinaatit ennen perspektiivimuunnosta. Nämä kuvautuvat perspektiivimuunnoksella D uusiksi vektoreiksi x i = D x k i = (x i,y i,z i /(k )+k/(k ), z i ) T, joiden neljäs komponentti kuuluu välille [k, ]. Palattaessa karteesiseen koordinaatistoon, saamme kärkipisteen lopulliset koordinaatit x c i yhdensuuntaisprojektiota varten. Kuten jo aiemmin havaittiin, ne ovat x c i = ( x i /z i, y i /z i, /(k ) k/(zk z)) T. Samaan lopputulokseen päädytään myös toista kautta. Muodostetaan koordi-

73 22 LUKU 4. NÄKYVYYS, REALISMI naateista x k i uudet vektorit ˆ x i skaalaamalla suureilla /z i : ˆ x i = ( x i /z i, y i /z i,, /z i ) T. (4.40) Skaalaustermi /z i on aina hyvin määritelty järkevillä kameraparametreilla, joten edellinen kuvaus joka kuvaa vektorit x k i vektoreiksi x ˆ i on kääntyvä. Selvästi x k i = z i xi ˆ. Sovelletaan vektoreihin x ˆ i perspektiivimuunnosta D. Saamme tuloksena vektorit Dˆ x i = ( x i /z i, y i /z i, /(k ) k/(z i k z i ),) T, (4.4) jotka johtavat samoihin karteesisiin koordinaatteihin kuin johtavat vektorit D x k i. Tutkitaan seuraavaksi kuinka kahden vektorin x ˆ ja x ˆ 2 lineaarinen interpolantti kuvautuu perspektiivimuunnoksessa. Olkoon siis 0 α annettu: D(( α)ˆ x + α x ˆ 2 ) = ( α)dˆ x + αdˆ x 2. (4.42) Koska vektorien Dˆ x i,i =,2 neljäs komponentti on aina, on myös niiden lineaarisen interpolantin neljäs komponentti väistämättä. Tämä tarkoittaa siis sitä, että interpolanttia vastaavat karteesiset koordinaatit saadaan interpoloimalla lineaarisesti karteesisia koordinaatteja x c ja xc 2, eli pistettä D(( α)ˆ x + α x ˆ 2 ) vastaava karteesinen koordinaatti on ( α) x c + α xc 2. (4.43) Ajatellaan sama asia kääntäen. Haluamme käytännössä, että liukuvan suoran menetelmä hallitsee koko piirtoprosessia. Näin ollen haluamme interpoloida kaikkia tarvittavia suureita lineaarisesti kärkipisteiden karteesisten koordinaattien x c i määräämänä. Yritämme nyt kehittää tekniikan, jolla kärkipisteiden kanoniset koordinaatit voidaan interpoloida karteesisiin koordinaatteihin perustuvalla lineaarisella interpolaatiolla. Tavoitteena on tietenkin löytää se pinnan piste, joka projisoituu perspektiiviprojektiossa annettuun pikseliin kuvatasolle. Osoittautuu, että se kanonisen koordinaatiston piste, joka kuvautuu perspektiivimuunnoksella karteesisen koordinaatiston pisteeksi ( α) x c + α xc 2 on p k α = ( α) x z +α x 2 z2 ( α) z + α z 2 ( α) y z +α y 2 z2 ( α) z + α z 2 ( α) z + α z 2. (4.44)

74 4.2. VALAISTUKSEN SIMULOINTI 23 Tämä nähdään soveltamalla edelliseen pisteeseen muunnosta D. Merkitään jatkossa β = (4.45) ( α) z + z α 2 Nyt on voimassa ( α) x z α x 2 ( α) x z 2 z α x 2 z 2 D p k ( α) α = βd y z α y 2 z 2 = β ( α) y z α y 2 z 2. (4.46) ( α) z z α k ( α) z k +α k z 2 k 2 Pistettä D p k α vastaa siis karteesisessa koordinaatistossa piste ( α) x z α x 2 z 2 ( α) y z α y 2 z 2 k ( α) z k +α k z 2 k = ( α) x z y z k k z (k ) + α x 2 z 2 y 2 z 2 k k z (k ) = ( α) x c + α xc 2. (4.47) Riittää siis enää kehittää tapa, jolla voimme laskea tehokkaasti pisteen p k α. Aiempia tuloksia hyödyntäen näemme, että p k α = (( α)ˆ x + α x ω ˆ 2 ), (4.48) missä ω on interpolanttivektorin ( α)ˆ x + α x ˆ 2 neljäs komponentti. Olemme siis saaneet johdettua seuraavan tavan interpoloida kanonisia koordinaatteja karteesisten koordinaattien lineaarisen interpolaation avulla. Olkoon interpoloitavat kanoniset koordinaatit x k ja xk 2 ja niitä vastaavat karteesiset koordinaatit x c ja xc 2 (Näistä saatiin pikselikoordinaatit). Interpoloitaessa karteesisia koordinaatteja (askellettaessa pikseleittäin vastaavia pikseleitä) interpoloidaan samoilla painokertoimilla vektoreita x ˆ i, jotka muodostetaan kaavalla (4.40) kanonisista koordinaateista. Se kanonisen koordinaatiston piste, joka projisoituu karteesisten koordinaattien interpolantiksi saadaan kaavasta (4.48). Huomautus: Sama tekniikka toimii suoraan myös maailmankoordinaateille, koska kanoniset koordinaatit (koordinaatit ennen perspektiivimuunnoksen soveltamista) saadaan affiinilla kuvauksella maailmankoordinaateista.

75 24 LUKU 4. NÄKYVYYS, REALISMI Huomautus: Edellinen maailmankoordinaattien tarkka interpolointi ei yleensä ole välttämätöntä valaistussimuloinnissa. Lopputulos on käytännössä aivan kelvollinen vaikka käytetään yksinkertaista lineaarista interpolointia. Jos mallin yksityiskohtia lisätään erilaisin mapping-tekniikoin (katso oheismateriaali), täytyy tyydyttävään lopputulokseen pääsemiseksi interpoloida esimerkiksi tekstuurikoordinaatit edellä esitetyllä tarkalla interpolointitekniikalla. Jos tekstuurikoordinaatit interpoloidaan lineaarisesti, tulee lopputuloksesta epäluonnollisen näköinen. Lähellä katselupistettä pintatekstuuri näyttää kutistuvan, ja kaukana se näyttä venyneeltä Williamsin z-puskurivarjoalgoritmi Varjojen määräämiseksi on kehitelty useita menetelmiä, jotka toimivat joko mallitustarkkuudella tai esitystarkkuudella. Varjojen määrääminen näkymään on oleellisesti yhtä vaikeaa kuin näkyvien pintojen määrääminen annetuin kameraparametrein. Selvästikin annettu pinnan piste ei ole varjossa annetun valonlähteen suhteen, jos piste on näkyvä kun näkymää katsotaan kyseisestä valonlähteestä. Tarkastellaan seuraavaksi niin kutsuttua Williamsin menetelmää varjojen lisäämiseksi. Se on esitystarkkuudella toimiva kaksivaiheinen menetelmä, joka käyttää z-puskuritekniikkaa. Ensimmäisessä vaiheessa määrätään vuorollaan jokaiselle valonlähteelle ne pinnat, jotka kyseisestä valonlähteestä katsottaessa ovat näkyvissä. Tämä tehdään siten, että valonlähteen paikalle asetetaan synteettinen kamera käyttäjän säädeltävissä olevin kameraparametrein. Jos halutaan simuloida pistemäisen valonlähteen aiheuttamia varjoja, käytetään perspektiiviprojektiota. Yhdensuuntaisprojektiolla puolestaan voidaan simuloida suunnatun valon (esimerkiksi Auringon) aiheuttamia varjoja. Kameraparametrit rajaavat maailmankoordinaatistosta käytettävän projektiotavan määräämän tilavuuden, jonka sisäpuolen kyseinen valonlähde pystyy valaisemaan. Tämä valonlähde on siis hieman epäfysikaalinen, sen valaistusefekti rajoittuu äärellisen tilavuuden sisälle. Seuraavaksi muodostetaan kameraparametrien ja projektiotavan määräämä normalisointimuunnosmatriisi ja varataan tilaa valonlähteen z-puskuritaulukolle. Sekä muunnosmatriisi että z-puskuritaulukko taltioidaan valonlähteen tietorakenteisiin. Seuraavaksi näkymän monikulmiot kuvataan maailmankoordinaatistosta valonlähteen normalisointimuunnoksella ja rasteroidaan liukuvan suoran menetelmällä käyttäen z-puskuritekniikkaa valonlähteestä näkyvien pintojen määräämiseksi. Rasteroitaessa monikulmioita talletetaan ainoastaan z-puskuri-informaatio. Itse pikselikuvaa ei piirretä. Kun kaikki va-

76 4.2. VALAISTUKSEN SIMULOINTI 25 lonlähteet (poislukien tietenkin yleisvalo) on näin käsitelty, on jokaisella valonlähteellä tallessa tieto näkyvien pintojen etäisyydestä valonlähteestä katsoen z- puskuritaulukossa. Menetelmän toisessa vaiheessa näkymä rasteroidaan käyttäjän määräämin kameraasetuksin. Monikulmiot sävytetään käyttäen Phongin sävytystä ja maailmankoordinaatit interpoloidaan hienostuneimmassa toteutuksessa tarkasti. Kun piirrettäväksi määräytyneelle pikselille evaluoidaan valaistusmallia (4.32), toimitaan kullekin valonlähteelle seuraavasti: Piirrettävää pikseliä vastaava interpoloitu pinnan pisteen maailmankoordinaatti kuvataan vuorossa olevaan valonlähteeseen talletetulla normalisointimuunnoksella, jolloin kyseistä pistettä ikäänkuin katsotaan kyseisestä valonlähteestä. Saatua z-koordinaattia verrataan valonlähteen z-puskuriin menetelmän ensimmäisessä vaiheessa talletettuun z-arvoon. Kyseinen z-arvo vastaa siis lähintä pinnan pistettä valonlähteestä katsoen. Jos kuvatun pisteen z-koordinaatti on aidosti suurempi kuin z-puskuriin tallettu arvo, katsotaan, että kyseinen piste ei ole näkyvissä tästä valonlähteestä. Tällöin kyseisen valonlähteen vaikutusta pinnan pisteen kirkkauteen ei huomioida lainkaan. Muussa tapauksessa valonlähteen kontribuutio huomioidaan kaavan (4.32) mukaisesti valaistusmallissa. Menetelmän toteutuksessa on huomioitava useita seikkoja. Valonlähteiden z- puskureiden resoluutio tulee olla varsin suuri, jotta varjojen reunat saadaan riittävän sileiksi. Liian alhainen resoluutio johtaa palikkamaisiin reunoihin. Vertailtaessa normalisointimuunnetun pinnan pisteen z-koordinaattia valonlähteen z- puskurista löytyvään arvoon tulee liukulukujen pyöristysvirheiden takia sallia vertailussa pieni hihatoleranssi, jonka määrääminen on yleensä kokeellista. Monikulmioiden sävytystekniikkana tulee käyttää Phongin sävytystä. Gouraudin sävytyksessä valaistusmalli evaluoidaan vain kärkipisteissä, jolloin varjon reunan tarkkuus kärsii. Menetelmän toimintaa on havainnollistettu kuvissa 4.28 ja Ensimmäisessä kuvassa on havainnollistettu valonlähteen z-puskuritietoa. Kyseisen valonlähteen kameraparametrit on valittu siten, että kuva-ala käytetään mahdollisimman tarkkaan. Valonlähteen z-puskurin resoluutioksi valittiin kaksinkertainen resoluutio verrattuna tulosrasterikuvan resoluutioon. Tällä pyrittiin tarkentamaan varjojen reunojen approksimaatioita. Valonlähteen kameraparametrit rajaavat toisen otuksen pyrstöstä pätkän pois. Tämä havaitaan varjona pyrstössä lopputuloskuvassa Kuvissa 4.30 ja 4.3 on havainnollistettu Williamsin menetelmän toimintaa käytettäessä Gouraudin ja Phongin sävytystekniikkaa. Kuten havaitaan, menetelmä ei toimi tyydyttävästi Gouraudin sävytyksellä, koska siinä valaistusmalli (ja täten samalla varjot) evaluoidaan vain kärkipisteissä. Seurauksena on varjon reunan palikkamaisuus.

77 26 LUKU 4. NÄKYVYYS, REALISMI Kuva 4.28: Williamsin z-puskurivarjoalgoritmi: Kuvassa 4.29 selkeimmin näkyvän varjon aiheuttavan valonlähteen z-puskuritieto. Kuva 4.29: Williamsin z-puskurivarjoalgoritmi: Lopputulos.

78 4.2. VALAISTUKSEN SIMULOINTI 27 Kuva 4.30: Williamsin z-puskurivarjoalgoritmi: Gouraudin sävytystä käytettäessä varjon reuna palikoituu, koska valaistusmalli ja täten myös varjot evaluoidaan vain monikulmioiden kärkipisteissä. Kuva 4.3: Williamsin z-puskurivarjoalgoritmi: Phongin sävytyksellä saavutetaan tyydyttävä lopputulos.

Luento 3: 3D katselu. Sisältö

Luento 3: 3D katselu. Sisältö Tietokonegrafiikan perusteet T-.43 3 op Luento 3: 3D katselu Lauri Savioja Janne Kontkanen /27 3D katselu / Sisältö Kertaus: koordinaattimuunnokset ja homogeeniset koordinaatit Näkymänmuodostus Kameran

Lisätiedot

Luento 7: 3D katselu. Sisältö

Luento 7: 3D katselu. Sisältö Tietokonegrafiikka / perusteet Tik-.3/3 4 ov / 2 ov Luento 7: 3D katselu Lauri Savioja /4 3D katselu / Sisältö Koorinaattimuunnokset Kameran ja maailmankoorinaatiston yhteys Perspektiivi 3D katselu / 2

Lisätiedot

T-111.4310 Vuorovaikutteinen tietokonegrafiikka Tentti 14.12.2011

T-111.4310 Vuorovaikutteinen tietokonegrafiikka Tentti 14.12.2011 T-111.4310 Vuorovaikutteinen tietokonegrafiikka Tentti 14.12.2011 Vastaa kolmeen tehtävistä 1-4 ja tehtävään 5. 1. Selitä lyhyesti mitä seuraavat termit tarkoittavat tai minkä ongelman algoritmi ratkaisee

Lisätiedot

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

Osoita, että kaikki paraabelit ovat yhdenmuotoisia etsimällä skaalauskuvaus, joka vie paraabelin y = ax 2 paraabelille y = bx 2. VASTAUS: , b = 2 2 8. Geometriset kuvaukset 8.1. Euklidiset kuvaukset 344. Esitä muodossa x = Ax + b se avaruuden E 3 peilauskuvaus, jonka symmetriatasona on x 1 3x + x 3 = 6. A = 1 3 6 6 3, b = 1 1 18. 3 6 6 345. Tason

Lisätiedot

Vektorien pistetulo on aina reaaliluku. Esimerkiksi vektorien v = (3, 2, 0) ja w = (1, 2, 3) pistetulo on

Vektorien pistetulo on aina reaaliluku. Esimerkiksi vektorien v = (3, 2, 0) ja w = (1, 2, 3) pistetulo on 13 Pistetulo Avaruuksissa R 2 ja R 3 on totuttu puhumaan vektorien pituuksista ja vektoreiden välisistä kulmista. Kuten tavallista, näiden käsitteiden yleistäminen korkeampiulotteisiin avaruuksiin ei onnistu

Lisätiedot

Tampereen yliopisto Tietokonegrafiikka 2013 Tietojenkäsittelytiede Harjoitus

Tampereen yliopisto Tietokonegrafiikka 2013 Tietojenkäsittelytiede Harjoitus Tampereen yliopisto Tietokonegrafiikka 201 Tietojenkäsittelytiede Harjoitus 6 1..201 1. Tarkastellaan Gouraudin sävytysmallia. Olkoon annettuna kolmio ABC, missä A = (0,0,0), B = (2,0,0) ja C = (1,2,0)

Lisätiedot

Tekijä Pitkä matematiikka

Tekijä Pitkä matematiikka K1 Tekijä Pitkä matematiikka 5 7..017 a) 1 1 + 1 = 4 + 1 = 3 = 3 4 4 4 4 4 4 b) 1 1 1 = 4 6 3 = 5 = 5 3 4 1 1 1 1 1 K a) Koska 3 = 9 < 10, niin 3 10 < 0. 3 10 = (3 10 ) = 10 3 b) Koska π 3,14, niin π

Lisätiedot

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

Suorien ja tasojen geometriaa Suorien ja tasojen yhtälöt 6. Suorien tasojen geometriaa 6.1. Suorien tasojen yhtälöt 55. Osoita, että yhtälöt x = 3 + τ y = 1 3τ esittävät samaa tason suoraa. Yhteinen piste 1,5) suunta i 3j. x = 1 6τ y = 5 + 9τ 56. Määritä suoran

Lisätiedot

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

Tekijä Pitkä matematiikka Suoran pisteitä ovat esimerkiksi ( 5, 2), ( 2,1), (1, 0), (4, 1) ja ( 11, 4). Tekijä Pitkä matematiikka 4 9.12.2016 212 Suoran pisteitä ovat esimerkiksi ( 5, 2), ( 2,1), (1, 0), (4, 1) ja ( 11, 4). Vastaus esimerkiksi ( 5, 2), ( 2,1), (1, 0), (4, 1) ja ( 11, 4) 213 Merkitään pistettä

Lisätiedot

BM20A5800 Funktiot, lineaarialgebra ja vektorit Harjoitus 4, Syksy 2016

BM20A5800 Funktiot, lineaarialgebra ja vektorit Harjoitus 4, Syksy 2016 BM20A5800 Funktiot, lineaarialgebra ja vektorit Harjoitus 4, Syksy 2016 1. Hahmottele karkeasti funktion f : R R 2 piirtämällä sen arvoja muutamilla eri muuttujan arvoilla kaksiulotteiseen koordinaatistoon

Lisätiedot

Suorista ja tasoista LaMa 1 syksyllä 2009

Suorista ja tasoista LaMa 1 syksyllä 2009 Viidennen viikon luennot Suorista ja tasoista LaMa 1 syksyllä 2009 Perustuu kirjan Poole: Linear Algebra lukuihin I.3 - I.4 Esko Turunen esko.turunen@tut.fi Aluksi hiukan 2 ja 3 ulotteisen reaaliavaruuden

Lisätiedot

Yleistä vektoreista GeoGebralla

Yleistä vektoreista GeoGebralla Vektoreita GeoGebralla Vektoreilla voi laskea joko komentopohjaisesti esim. CAS-ikkunassa tai piirtämällä piirtoikkunassa. Ensimmäisen tavan etuna on, että laskujen tueksi muodostuu kuva. Tästä on varmasti

Lisätiedot

2 Pistejoukko koordinaatistossa

2 Pistejoukko koordinaatistossa Pistejoukko koordinaatistossa Ennakkotehtävät 1. a) Esimerkiksi: b) Pisteet sijaitsevat pystysuoralla suoralla, joka leikkaa x-akselin kohdassa x =. c) Yhtälö on x =. d) Sijoitetaan joitain ehdon toteuttavia

Lisätiedot

5. Grafiikkaliukuhihna: (1) geometriset operaatiot

5. Grafiikkaliukuhihna: (1) geometriset operaatiot 5. Grafiikkaliukuhihna: () geometriset operaatiot Johdanto Grafiikkaliukuhihnan tarkoitus on kuvata kolmiulotteisen kohdeavaruuden kuva kaksiulotteiseen kuva eli nättöavaruuteen. aikka kolmiulotteisiakin

Lisätiedot

Konformigeometriaa. 5. maaliskuuta 2006

Konformigeometriaa. 5. maaliskuuta 2006 Konformigeometriaa 5. maaliskuuta 006 1 Sisältö 1 Konformigeometria 1.1 Viivan esitys stereograasena projektiona............ 1. Euklidisen avaruuden konformaalinen malli........... 4 Konformikuvaukset

Lisätiedot

Tampereen yliopisto Tietokonegrafiikka 2013 Tietojenkäsittelytiede Harjoitus

Tampereen yliopisto Tietokonegrafiikka 2013 Tietojenkäsittelytiede Harjoitus Tampereen yliopisto Tietokonegrafiikka 2013 Tietojenkäsittelytiede Harjoitus 2 7.2.2013 1. Matematiikan lukiokurssissa on esitetty, että ylöspäin aukeavan paraabelin f(x) = ax 2 +bx+c,a > 0,minimikohtasaadaan,kunf

Lisätiedot

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

Yhtälöryhmä matriisimuodossa. MS-A0004/A0006 Matriisilaskenta. Tarkastellaan esimerkkinä lineaarista yhtälöparia. 2x1 x 2 = 1 x 1 + x 2 = 5. 2. MS-A4/A6 Matriisilaskenta 2. Nuutti Hyvönen, c Riikka Kangaslampi Matematiikan ja systeemianalyysin laitos Aalto-yliopisto 5.9.25 Tarkastellaan esimerkkinä lineaarista yhtälöparia { 2x x 2 = x + x 2

Lisätiedot

Lieriö ja särmiö Tarkastellaan pintaa, joka syntyy, kun tasoa T leikkaava suora s liikkuu suuntansa

Lieriö ja särmiö Tarkastellaan pintaa, joka syntyy, kun tasoa T leikkaava suora s liikkuu suuntansa Lieriö ja särmiö Tarkastellaan pintaa, joka syntyy, kun tasoa T leikkaava suora s liikkuu suuntansa säilyttäen pitkin tason T suljettua käyrää (käyrä ei leikkaa itseään). Tällöin suora s piirtää avaruuteen

Lisätiedot

Insinöörimatematiikka D, laskuharjoituksien esimerkkiratkaisut

Insinöörimatematiikka D, laskuharjoituksien esimerkkiratkaisut Insinöörimatematiikka D, 29.3.2016 4. laskuharjoituksien esimerkkiratkaisut 1. Olkoon u (4,0,4,2) ja v ( 1,1,3,5) vektoreita vektoriavaruudessa R 4. Annetun sisätulon (x,y) indusoima normi on x (x,x) ja

Lisätiedot

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

Tietokonegrafiikka. Jyry Suvilehto T Johdatus tietoliikenteeseen ja multimediatekniikkaan kevät 2014 Tietokonegrafiikka Jyry Suvilehto T-110.1100 Johdatus tietoliikenteeseen ja multimediatekniikkaan kevät 2014 1. Sovellusalueita 2. Rasterigrafiikkaa 3. Vektorigrafiikkaa 4. 3D-grafiikkaa 1. Säteenheitto

Lisätiedot

yleisessä muodossa x y ax by c 0. 6p

yleisessä muodossa x y ax by c 0. 6p MAA..0 Muista kirjoittaa jokaiseen paperiin nimesi! Tee vastauspaperin yläreunaan pisteytysruudukko! Valitse kuusi tehtävää! Perustele vastauksesi välivaiheilla! Jussi Tyni Ratkaise: a) x x b) xy x 6y

Lisätiedot

Vanhoja koetehtäviä. Analyyttinen geometria 2016

Vanhoja koetehtäviä. Analyyttinen geometria 2016 Vanhoja koetehtäviä Analyyttinen geometria 016 1. Määritä luvun a arvo, kun piste (,3) on käyrällä a(3x + a) = (y - 1). Suora L kulkee pisteen (5,1) kautta ja on kohtisuorassa suoraa 6x + 7y - 19 = 0 vastaan.

Lisätiedot

9. Vektorit. 9.1 Skalaarit ja vektorit. 9.2 Vektorit tasossa

9. Vektorit. 9.1 Skalaarit ja vektorit. 9.2 Vektorit tasossa 9. Vektorit 9.1 Skalaarit ja vektorit Skalaari on koon tai määrän mitta. Tyypillinen esimerkki skalaarista on massa. Lukumäärä on toinen hyvä esimerkki skalaarista. Vektorilla on taas suuruus ja suunta.

Lisätiedot

Tietokonegrafiikan perusteet

Tietokonegrafiikan perusteet Tietokonegrafiikan perusteet Tuomo Rossi Jyväskylän yliopisto Tietotekniikan laitos 7. syyskuuta 2003 1 2 Sisältö 1 Lineaarialgebran kertausta 1 1.1 Vektorit............................... 1 1.1.1 Vektorien

Lisätiedot

Tilanhallintatekniikat

Tilanhallintatekniikat Tilanhallintatekniikat 3D grafiikkamoottoreissa Moottori on projektin osa joka vastaa tiettyjen toiminnallisuuksien hallinnasta hallitsee kaikki vastuualueen datat suorittaa kaikki tehtäväalueen toiminnot

Lisätiedot

1. Olkoot vektorit a, b ja c seuraavasti määritelty: a) Määritä vektori. sekä laske sen pituus.

1. Olkoot vektorit a, b ja c seuraavasti määritelty: a) Määritä vektori. sekä laske sen pituus. Matematiikan kurssikoe, Maa4 Vektorit RATKAISUT Sievin lukio Keskiviikko 12.4.2017 VASTAA YHTEENSÄ VIITEEN TEHTÄVÄÄN! MAOL JA LASKIN/LAS- KINOHJELMAT OVAT SALLITTUJA! 1. Olkoot vektorit a, b ja c seuraavasti

Lisätiedot

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

Suorat ja tasot, L6. Suuntajana. Suora xy-tasossa. Suora xyzkoordinaatistossa. Taso xyzkoordinaatistossa. Tason koordinaattimuotoinen yhtälö. Suorat ja tasot, L6 Suora xyz-koordinaatistossa Taso xyz-koordinaatistossa stä stä 1 Näillä kalvoilla käsittelemme kolmen laisia olioita. Suora xyz-avaruudessa. Taso xyz-avaruudessa. Emme nyt ryhdy pohtimaan,

Lisätiedot

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

y=-3x+2 y=2x-3 y=3x+2 x = = 6 MAA Koe, Arto Hekkanen ja Jussi Tyni 5.5.015 Loppukoe LASKE ILMAN LASKINTA. 1. Yhdistä kuvaaja ja sen yhtälö a) 3 b) 1 c) 5 d) Suoran yhtälö 1) y=3x ) 3x+y =0 3) x y 3=0 ) y= 3x 3 5) y= 3x 6) 3x y+=0 y=-3x+

Lisätiedot

3.2 Matriisien laskutoimitukset. 3.2 Matriisien laskutoimitukset. 3.2 Matriisien laskutoimitukset. 3.2 Matriisien laskutoimitukset. Olkoot A 2 := AA =

3.2 Matriisien laskutoimitukset. 3.2 Matriisien laskutoimitukset. 3.2 Matriisien laskutoimitukset. 3.2 Matriisien laskutoimitukset. Olkoot A 2 := AA = 3 3 Olkoot 9 8 B 7 6 ja A 5 4 [ 3 4 Nyt A + B, AB ja BB eivät ole mielekkäitä (vastaavilla lineaarikuvauksilla menisivät dimensiot solmuun tällaisista yhdistelmistä) Kuitenkin voidaan laskea BA ja 9( )

Lisätiedot

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.

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. Tekijä Pitkä matematiikka 4 9.1.016 79 a) Kuvasta nähdään, että a = 3i + j. b) Kuvasta nähdään, että b = i 4 j. c) Käytetään a- ja b-kohtien tuloksia ja muokataan lauseketta. 5a b = 5(3i + j) ( i 4 j)

Lisätiedot

Matematiikan tukikurssi

Matematiikan tukikurssi Matematiikan tukikurssi Kurssikerta 6 varuusintegraali iemmin laskimme yksiulotteisia integraaleja b a f (x)dx, jossa integrointialue on x-akselin väli [a, b]. Lisäksi laskimme kaksiulotteisia integraaleja

Lisätiedot

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

Taso 1/5 Sisältö ESITIEDOT: vektori, koordinaatistot, piste, suora Taso 1/5 Sisältö Taso geometrisena peruskäsitteenä Kolmiulotteisen alkeisgeometrian peruskäsitteisiin kuuluu taso pisteen ja suoran lisäksi. Intuitiivisesti sitä voidaan ajatella joka suunnassa äärettömyyteen

Lisätiedot

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

Avaruuden kolme sellaista pistettä, jotka eivät sijaitse samalla suoralla, määräävät 11 Taso Avaruuden kolme sellaista pistettä, jotka eivät sijaitse samalla suoralla, määräävät tason. Olkoot nämä pisteet P, B ja C. Merkitään vaikkapa P B r ja PC s. Tällöin voidaan sanoa, että vektorit

Lisätiedot

MS-A0003/A0005 Matriisilaskenta Laskuharjoitus 2 / vko 45

MS-A0003/A0005 Matriisilaskenta Laskuharjoitus 2 / vko 45 MS-A0003/A0005 Matriisilaskenta Laskuharjoitus / vko 5 Tehtävä 1 (L): Hahmottele kompleksitasoon ne pisteet, jotka toteuttavat a) z 3 =, b) z + 3 i < 3, c) 1/z >. Yleisesti: ehto z = R, z C muodostaa kompleksitasoon

Lisätiedot

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

Juuri 4 Tehtävien ratkaisut Kustannusosakeyhtiö Otava päivitetty Kertaus. b) B = (3, 0, 5) K2. ( ) Kertaus K1. a) OA =- i + j + k K. b) B = (, 0, 5) K. a) AB = (6 -(- )) i + ( - ) j + (- -(- 7)) k = 8i - j + 4k AB = 8 + (- 1) + 4 = 64+ 1+ 16 = 81= 9 b) 1 1 ( ) AB = (--(- 1)) i + - - 1 j =-i - 4j AB

Lisätiedot

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.

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. RATKAISUT 198 197 198. Olkoon suorakulmion erisuuntaisten sivujen pituudet a ja b sekä neliön sivun pituus c. Tehtävä on mielekäs vain, jos suorakulmio ei ole neliö, joten oletetaan, että a b. Suorakulmion

Lisätiedot

Tekijä Pitkä matematiikka Poistetaan yhtälöparista muuttuja s ja ratkaistaan muuttuja r.

Tekijä Pitkä matematiikka Poistetaan yhtälöparista muuttuja s ja ratkaistaan muuttuja r. Tekijä Pitkä matematiikka 4 16.12.2016 K1 Poistetaan yhtälöparista muuttuja s ja ratkaistaan muuttuja r. 3 r s = 0 4 r+ 4s = 2 12r 4s = 0 + r+ 4s = 2 13 r = 2 r = 2 13 2 Sijoitetaan r = esimerkiksi yhtälöparin

Lisätiedot

Matematiikan tukikurssi

Matematiikan tukikurssi Matematiikan tukikurssi Kurssikerta 8 1 Suunnattu derivaatta Aluksi tarkastelemme vektoreita, koska ymmärrys vektoreista helpottaa alla olevien asioiden omaksumista. Kun liikutaan tasossa eli avaruudessa

Lisätiedot

3.2 Matriisien laskutoimitukset. 3.2 Matriisien laskutoimitukset. 3.2 Matriisien laskutoimitukset. 3.2 Matriisien laskutoimitukset

3.2 Matriisien laskutoimitukset. 3.2 Matriisien laskutoimitukset. 3.2 Matriisien laskutoimitukset. 3.2 Matriisien laskutoimitukset 32 Idea: Lineaarikuvausten laskutoimitusten avulla määritellään vastaavat matriisien laskutoimitukset Vakiolla kertominen ja summa Olkoon t R ja A, B R n m Silloin ta, A + B R n m ja määritellään ta ta

Lisätiedot

0, niin vektorit eivät ole kohtisuorassa toisiaan vastaan.

0, niin vektorit eivät ole kohtisuorassa toisiaan vastaan. Tekijä Pitkä matematiikka 4 9.1.016 168 a) Lasketaan vektorien a ja b pistetulo. a b = (3i + 5 j) (7i 3 j) = 3 7 + 5 ( 3) = 1 15 = 6 Koska pistetulo a b 0, niin vektorit eivät ole kohtisuorassa toisiaan

Lisätiedot

Lineaarinen yhtälöryhmä

Lineaarinen yhtälöryhmä Lineaarinen yhtälöryhmä 1 / 39 Lineaarinen yhtälö Määritelmä 1 Lineaarinen yhtälö on muotoa a 1 x 1 + a 2 x 2 + + a n x n = b, missä a i, b R, i = 1,..., n ovat tunnettuja ja x i R, i = 1,..., n ovat tuntemattomia.

Lisätiedot

JAKSO 2 KANTA JA KOORDINAATIT

JAKSO 2 KANTA JA KOORDINAATIT JAKSO 2 KANTA JA KOORDINAATIT Kanta ja dimensio Tehtävä Esittele vektoriavaruuden kannan määritelmä vapauden ja virittämisen käsitteiden avulla ja anna vektoriavaruuden dimension määritelmä Esittele Lause

Lisätiedot

a b c d

a b c d 1. 11. 011!"$#&%(')'+*(#-,.*/103/465$*784 /(9:*;9."$ *;5> *@9 a b c d 1. + +. 3. 4. 5. 6. + + + + + + + + + + P1. 5 140 8 47 = 5 140 ( 3 ) 47 = 5 140 3 47 = 5 140 141 = (5 ) 140 = 10 140, jossa on

Lisätiedot

1 Kertaus. Lineaarinen optimointitehtävä on muotoa:

1 Kertaus. Lineaarinen optimointitehtävä on muotoa: 1 Kertaus Lineaarinen optimointitehtävä on muotoa: min c 1 x 1 + c 2 x 2 + + c n x n kun a 11 x 1 + a 12 x 2 + + a 1n x n b 1 a 21 x 1 + a 22 x 2 + + a 2n x n b 2 (11) a m1 x 1 + a m2 x 2 + + a mn x n

Lisätiedot

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

Yhtälöryhmä matriisimuodossa. MS-A0007 Matriisilaskenta. Tarkastellaan esimerkkinä lineaarista yhtälöparia. 2x1 x 2 = 1 x 1 + x 2 = 5. 2. MS-A000 Matriisilaskenta 2. Nuutti Hyvönen, c Riikka Kangaslampi Matematiikan ja systeemianalyysin laitos Aalto-yliopisto 2..205 Tarkastellaan esimerkkinä lineaarista yhtälöparia { 2x x 2 = x x 2 =

Lisätiedot

3 Suorat ja tasot. 3.1 Suora. Tässä luvussa käsitellään avaruuksien R 2 ja R 3 suoria ja tasoja vektoreiden näkökulmasta.

3 Suorat ja tasot. 3.1 Suora. Tässä luvussa käsitellään avaruuksien R 2 ja R 3 suoria ja tasoja vektoreiden näkökulmasta. 3 Suorat ja tasot Tässä luvussa käsitellään avaruuksien R 2 ja R 3 suoria ja tasoja vektoreiden näkökulmasta. 3.1 Suora Havaitsimme skalaarikertolaskun tulkinnan yhteydessä, että jos on mikä tahansa nollasta

Lisätiedot

Luento 2 Stereokuvan laskeminen. 2008 Maa-57.1030 Fotogrammetrian perusteet 1

Luento 2 Stereokuvan laskeminen. 2008 Maa-57.1030 Fotogrammetrian perusteet 1 Luento 2 Stereokuvan laskeminen 2008 Maa-57.1030 Fotogrammetrian perusteet 1 Aiheet Stereokuvan laskeminen stereokuvan piirto synteettisen stereokuvaparin tuottaminen laskemalla stereoelokuva kollineaarisuusyhtälöt

Lisätiedot

Teoreettisia perusteita II

Teoreettisia perusteita II Teoreettisia perusteita II Origon siirto projektiokeskukseen:? Origon siirto projektiokeskukseen: [ X X 0 Y Y 0 Z Z 0 ] [ Maa-57.260 Kiertyminen kameran koordinaatistoon:? X X 0 ] Y Y 0 Z Z 0 Kiertyminen

Lisätiedot

a) on lokaali käänteisfunktio, b) ei ole. Piirrä näiden pisteiden ympäristöön asetetun neliöruudukon kuva. VASTAUS:

a) on lokaali käänteisfunktio, b) ei ole. Piirrä näiden pisteiden ympäristöön asetetun neliöruudukon kuva. VASTAUS: 6. Käänteiskuvaukset ja implisiittifunktiot 6.1. Käänteisfunktion olemassaolo 165. Määritä jokin piste, jonka ympäristössä funktiolla f : R 2 R 2, f (x,y) = (ysinx, x + y + 1) a) on lokaali käänteisfunktio,

Lisätiedot

! 7! = N! x 8. x x 4 x + 1 = 6.

! 7! = N! x 8. x x 4 x + 1 = 6. 9. 10. 2008 1. Pinnalta punaiseksi maalattu 3 3 3-kuutio jaetaan 27:ksi samankokoiseksi kuutioksi. Mikä osuus 27 pikkukuution kokonaispinta-alasta on punaiseksi maalattu? 2. Positiivisen kokonaisluvun

Lisätiedot

Sekalaiset tehtävät, 11. syyskuuta 2005, sivu 1 / 13. Tehtäviä

Sekalaiset tehtävät, 11. syyskuuta 2005, sivu 1 / 13. Tehtäviä Sekalaiset tehtävät, 11. syyskuuta 005, sivu 1 / 13 Tehtäviä Tehtävä 1. Johda toiseen asteen yhtälön ax + bx + c = 0, a 0 ratkaisukaava. Tehtävä. Määrittele joukon A R pienin yläraja sup A ja suurin alaraja

Lisätiedot

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

Suora 1/5 Sisältö ESITIEDOT: vektori, koordinaatistot, piste Suora 1/5 Sisältö KATSO MYÖS:, vektorialgebra, geometriset probleemat, taso Suora geometrisena peruskäsitteenä Pisteen ohella suora on geometrinen peruskäsite, jota varsinaisesti ei määritellä. Alkeisgeometriassa

Lisätiedot

3.3 Paraabeli toisen asteen polynomifunktion kuvaajana. Toisen asteen epäyhtälö

3.3 Paraabeli toisen asteen polynomifunktion kuvaajana. Toisen asteen epäyhtälö 3.3 Paraabeli toisen asteen polynomifunktion kuvaajana. Toisen asteen epäyhtälö Yhtälön (tai funktion) y = a + b + c, missä a 0, kuvaaja ei ole suora, mutta ei ole yhtälökään ensimmäistä astetta. Funktioiden

Lisätiedot

Kahden suoran leikkauspiste ja välinen kulma (suoraparvia)

Kahden suoran leikkauspiste ja välinen kulma (suoraparvia) Kahden suoran leikkauspiste ja välinen kulma (suoraparvia) Piste x 0, y 0 on suoralla, jos sen koordinaatit toteuttavat suoran yhtälön. Esimerkki Olkoon suora 2x + y + 8 = 0 y = 2x 8. Piste 5,2 ei ole

Lisätiedot

Kartio ja pyramidi

Kartio ja pyramidi Kartio ja pyramidi Kun avaruuden suora s liikkuu pitkin itseään leikkaamatonta tason T suljettua käyrää ja lisäksi kulkee tason T ulkopuolisen pisteen P kautta, suora s piirtää avaruuteen pinnan, jota

Lisätiedot

MS-A0003/A0005 Matriisilaskenta Malliratkaisut 4 / vko 47

MS-A0003/A0005 Matriisilaskenta Malliratkaisut 4 / vko 47 MS-A3/A5 Matriisilaskenta Malliratkaisut 4 / vko 47 Tehtävä 1 (L): Oletetaan, että AB = AC, kun B ja C ovat m n-matriiseja. a) Näytä, että jos A on kääntyvä, niin B = C. b) Seuraako yhtälöstä AB = AC yhtälö

Lisätiedot

Vektoriarvoiset funktiot Vektoriarvoisen funktion jatkuvuus ja derivoituvuus

Vektoriarvoiset funktiot Vektoriarvoisen funktion jatkuvuus ja derivoituvuus 8. Vektoriarvoiset funktiot 8.1. Vektoriarvoisen funktion jatkuvuus ja derivoituvuus 320. Olkoon u reaalimuuttujan vektoriarvoinen funktio R R n ja lim t a u(t) = b. Todista: lim t a u(t) = b. 321. Olkoon

Lisätiedot

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

Yhtälön oikealla puolella on säteen neliö, joten r. = 5 eli r = ± 5. Koska säde on positiivinen, niin r = 5. Tekijä Pitkä matematiikka 5 7..017 31 Kirjoitetaan yhtälö keskipistemuotoon ( x x ) + ( y y ) = r. 0 0 a) ( x 4) + ( y 1) = 49 Yhtälön vasemmalta puolelta nähdään, että x 0 = 4 ja y 0 = 1, joten ympyrän

Lisätiedot

169. 170. 171. 172. 173. 174. 5. Geometriset avaruudet. 5.1. Pisteavaruus, vektoriavaruus ja koordinaattiavaruus

169. 170. 171. 172. 173. 174. 5. Geometriset avaruudet. 5.1. Pisteavaruus, vektoriavaruus ja koordinaattiavaruus 5. Geometriset avaruudet 5.. Pisteavaruus, vektoriavaruus ja koordinaattiavaruus 69. Olkoon {b,b 2 } tason E 2 kanta ja olkoon u = 2b + 3b 2, v = 3b + 2b 2, w = b 2b 2. Määritä vektoreiden 2u v + w ja

Lisätiedot

Kaikkiin tehtäviin ratkaisujen välivaiheet näkyviin! Lue tehtävänannot huolellisesti. Tee pisteytysruudukko B-osion konseptin yläreunaan!

Kaikkiin tehtäviin ratkaisujen välivaiheet näkyviin! Lue tehtävänannot huolellisesti. Tee pisteytysruudukko B-osion konseptin yläreunaan! MAA4 koe 1.4.2016 Kaikkiin tehtäviin ratkaisujen välivaiheet näkyviin! Lue tehtävänannot huolellisesti. Tee pisteytysruudukko B-osion konseptin yläreunaan! Jussi Tyni A-osio: Ilman laskinta. Laske kaikki

Lisätiedot

Lineaarikuvausten. Lineaarikuvaus. Lineaarikuvauksia. Ydin. Matriisin ydin. aiheita. Aiheet. Lineaarikuvaus. Lineaarikuvauksen matriisi

Lineaarikuvausten. Lineaarikuvaus. Lineaarikuvauksia. Ydin. Matriisin ydin. aiheita. Aiheet. Lineaarikuvaus. Lineaarikuvauksen matriisi Lineaarikuvaukset aiheita ten ten 1 Matematiikassa sana lineaarinen liitetään kahden lineaariavaruuden väliseen kuvaukseen. ten Määritelmä Olkoon (L, +, ) ja (M, ˆ+, ˆ ) reaalisia lineaariavaruuksia, ja

Lisätiedot

Matematiikan tukikurssi

Matematiikan tukikurssi Matematiikan tukikurssi Kurssikerta 9 1 Implisiittinen derivointi Tarkastellaan nyt yhtälöä F(x, y) = c, jossa x ja y ovat muuttujia ja c on vakio Esimerkki tällaisesta yhtälöstä on x 2 y 5 + 5xy = 14

Lisätiedot

MAB3 - Harjoitustehtävien ratkaisut:

MAB3 - Harjoitustehtävien ratkaisut: MAB - Harjoitustehtävien ratkaisut: Funktio. Piirretään koordinaatistoakselit ja sijoitetaan pisteet:. a) Funktioiden nollakohdat löydetään etsimällä kuvaajien ja - akselin leikkauspisteitä. Funktiolla

Lisätiedot

Luento 4: Kiertomatriisi

Luento 4: Kiertomatriisi Maa-57.301 Fotogrammetrian yleiskurssi (P. Rönnholm / H. Haggrén, 28.9.2004) Luento 4: Kiertomatriisi Mitä pitäisi oppia? ymmärtää, että kiertomatriisilla voidaan kiertää koordinaatistoa ymmärtää, että

Lisätiedot

Aalto-yliopiston perustieteiden korkeakoulu Matematiikan ja systeemianalyysin laitos

Aalto-yliopiston perustieteiden korkeakoulu Matematiikan ja systeemianalyysin laitos Aalto-yliopiston perustieteiden korkeakoulu Matematiikan ja systeemianalyysin laitos Malinen/Vesanen MS-A0205/6 Differentiaali- ja integraalilaskenta 2, kevät 2017 Laskuharjoitus 4A (Vastaukset) alkuviikolla

Lisätiedot

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.

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. Tekijä Pitkä matematiikka 5 7..017 37 Pisteen (x, y) etäisyys pisteestä (0, ) on ( x 0) + ( y ). Pisteen (x, y) etäisyys x-akselista, eli suorasta y = 0 on y. Merkitään etäisyydet yhtä suuriksi ja ratkaistaan

Lisätiedot

5 Lineaariset yhtälöryhmät

5 Lineaariset yhtälöryhmät 5 Lineaariset yhtälöryhmät Edellisen luvun lopun esimerkissä päädyttiin yhtälöryhmään, jonka ratkaisemisesta riippui, kuuluuko tietty vektori eräiden toisten vektorien virittämään aliavaruuteen Tämäntyyppisiä

Lisätiedot

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

Juuri 4 Tehtävien ratkaisut Kustannusosakeyhtiö Otava päivitetty Kertaus. b) B = (3, 0, 5) K2. 8 ( 1) Kertaus K1. a) OA i k b) B = (, 0, 5) K. K. a) AB (6 ( )) i () ( ( 7)) k 8i 4k AB 8 ( 1) 4 64116 819 b) 1 1 AB( ( 1)) i 1 i 4 AB ( ) ( 4) 416 0 45 5 K4. a) AB AO OB OA OB ( i ) i i i 5i b) Pisteen A paikkavektori

Lisätiedot

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

A-osio. Tehdään ilman laskinta ja taulukkokirjaa! Valitse tehtävistä A1-A3 kaksi ja vastaa niihin. Maksimissaan tunti aikaa suorittaa A-osiota. MAA5.2 Loppukoe 24.9.2013 Jussi Tyni Valitse 6 tehtävää Muista merkitä vastauspaperiin oma nimesi ja tee etusivulle pisteytysruudukko Kaikkiin tehtävien ratkaisuihin välivaiheet näkyviin! A1. A-osio. Tehdään

Lisätiedot

x 5 15 x 25 10x 40 11x x y 36 y sijoitus jompaankumpaan yhtälöön : b)

x 5 15 x 25 10x 40 11x x y 36 y sijoitus jompaankumpaan yhtälöön : b) MAA4 ratkaisut. 5 a) Itseisarvon vastauksen pitää olla aina positiivinen, joten määritelty kun 5 0 5 5 tai ( ) 5 5 5 5 0 5 5 5 5 0 5 5 0 0 9 5 9 40 5 5 5 5 0 40 5 Jälkimmäinen vastaus ei toimi määrittelyjoukon

Lisätiedot

T-110.1100 Johdatus tietoliikenteeseen ja multimediatekniikkaan Tietokonegrafiikka

T-110.1100 Johdatus tietoliikenteeseen ja multimediatekniikkaan Tietokonegrafiikka Johdatus tietoliikenteeseen ja multimediatekniikkaan Tietokonegrafiikka Timo Tossavainen Mediatekniikan laitos, Aalto-yliopiston perustieteiden korkeakoulu Timo.Tossavainen@tkk.fi 25.3.2011 Sisältö Historiaa

Lisätiedot

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

TASON YHTÄLÖT. Tason esitystapoja ovat: vektoriyhtälö, parametriesitys (2 parametria), normaalimuotoinen yhtälö ja koordinaattiyhtälö. TSON YHTÄLÖT VEKTORIT, M4 Jokainen seuraavista määrää avaruuden tason yksikäsitteisesti: - kolme tason pistettä, jotka eivät ole samalla suoralla, - yksi piste ja pisteen ulkopuolinen suora, - yksi piste

Lisätiedot

Kertausosa. 5. Merkitään sädettä kirjaimella r. Kaaren pituus on tällöin r a) sin = 0, , c) tan = 0,

Kertausosa. 5. Merkitään sädettä kirjaimella r. Kaaren pituus on tällöin r a) sin = 0, , c) tan = 0, Kertausosa. a),6 60 576 Peruuttaessa pyörähdyssuunta on vastapäivään. Kulma on siis,4 60 864 a) 576 864 0,88m. a) α b 0,6769... 0,68 (rad) r,m 8cm β,90...,9 (rad) 4cm a) α 0,68 (rad) β,9 (rad). a) 5,0

Lisätiedot

Lineaarikombinaatio, lineaarinen riippuvuus/riippumattomuus

Lineaarikombinaatio, lineaarinen riippuvuus/riippumattomuus Lineaarikombinaatio, lineaarinen riippuvuus/riippumattomuus 1 / 51 Lineaarikombinaatio Johdattelua seuraavaan asiaan (ei tarkkoja määritelmiä): Millaisen kuvan muodostaa joukko {λv λ R, v R 3 }? Millaisen

Lisätiedot

Vektorit, suorat ja tasot

Vektorit, suorat ja tasot , suorat ja tasot 1 / 22 Koulussa vektori oli nuoli, jolla oli suunta ja suuruus eli pituus. Siirretään vektori siten, että sen alkupää on origossa. Tällöin sen kärki on pisteessä (x 1, x 2 ). Jos vektorin

Lisätiedot

MS-A0207 Differentiaali- ja integraalilaskenta 2 Luento 5: Gradientti ja suunnattu derivaatta. Vektoriarvoiset funktiot. Taylor-approksimaatio.

MS-A0207 Differentiaali- ja integraalilaskenta 2 Luento 5: Gradientti ja suunnattu derivaatta. Vektoriarvoiset funktiot. Taylor-approksimaatio. MS-A0207 Differentiaali- ja integraalilaskenta 2 Luento 5: Gradientti ja suunnattu derivaatta. Vektoriarvoiset funktiot. Taylor-approksimaatio. Riikka Korte Matematiikan ja systeemianalyysin laitos 1 Aalto-yliopisto

Lisätiedot

Kannan vektorit siis virittävät aliavaruuden, ja lisäksi kanta on vapaa. Lauseesta 7.6 saadaan seuraava hyvin käyttökelpoinen tulos:

Kannan vektorit siis virittävät aliavaruuden, ja lisäksi kanta on vapaa. Lauseesta 7.6 saadaan seuraava hyvin käyttökelpoinen tulos: 8 Kanta Tässä luvussa tarkastellaan aliavaruuden virittäjävektoreita, jotka muodostavat lineaarisesti riippumattoman jonon. Merkintöjen helpottamiseksi oletetaan luvussa koko ajan, että W on vektoreiden

Lisätiedot

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

Solmu 3/2001 Solmu 3/2001. Kevään 2001 ylioppilaskirjoitusten pitkän matematiikan kokeessa oli seuraava tehtävä: Frégier n lause Simo K. Kivelä Kevään 2001 ylioppilaskirjoitusten pitkän matematiikan kokeessa oli seuraava tehtävä: Suorakulmaisen kolmion kaikki kärjet sijaitsevat paraabelilla y = x 2 ; suoran kulman

Lisätiedot

Malleja ja menetelmiä geometriseen tietokonenäköön

Malleja ja menetelmiä geometriseen tietokonenäköön Malleja ja menetelmiä geometriseen tietokonenäköön Juho Kannala 7.5.2010 Johdanto Tietokonenäkö on ala, joka kehittää menetelmiä automaattiseen kuvien sisällön tulkintaan Tietokonenäkö on ajankohtainen

Lisätiedot

z 1+i (a) f (z) = 3z 4 5z 3 + 2z (b) f (z) = z 4z + 1 f (z) = 12z 3 15z 2 + 2

z 1+i (a) f (z) = 3z 4 5z 3 + 2z (b) f (z) = z 4z + 1 f (z) = 12z 3 15z 2 + 2 BM20A5700 - Integraauunnokset Harjoitus 2 1. Laske seuraavat raja-arvot. -kohta ratkeaa, kun pistät sekä yläkerran että alakerran muotoon (z z 1 )(z z 2 ), missä siis z 1 ja z 2 ovat näiden lausekkeiden

Lisätiedot

Muodonmuutostila hum 30.8.13

Muodonmuutostila hum 30.8.13 Muodonmuutostila Tarkastellaan kuvan 1 kappaletta Ω, jonka pisteet siirtvät ulkoisen kuormituksen johdosta siten, että siirtmien tapahduttua ne muodostavat kappaleen Ω'. Esimerkiksi piste A siirt asemaan

Lisätiedot

1 Ensimmäisen asteen polynomifunktio

1 Ensimmäisen asteen polynomifunktio Ensimmäisen asteen polynomifunktio ENNAKKOTEHTÄVÄT. a) f(x) = x 4 b) Nollakohdassa funktio f saa arvon nolla eli kuvaaja kohtaa x-akselin. Kuvaajan perusteella funktion nollakohta on x,. c) Funktion f

Lisätiedot

Pinta-alojen ja tilavuuksien laskeminen 1/6 Sisältö ESITIEDOT: määrätty integraali

Pinta-alojen ja tilavuuksien laskeminen 1/6 Sisältö ESITIEDOT: määrätty integraali Pinta-alojen ja tilavuuksien laskeminen 1/6 Sisältö ESITIEDOT: Tasoalueen pinta-ala Jos funktio f saa välillä [a, b] vain ei-negatiivisia arvoja, so. f() 0, kun [a, b], voidaan kuvaajan y = f(), -akselin

Lisätiedot

Oppimateriaali oppilaalle ja opettajalle : GeoGebra oppilaan työkaluna ylioppilaskirjoituksissa 2016 versio 0.8

Oppimateriaali oppilaalle ja opettajalle : GeoGebra oppilaan työkaluna ylioppilaskirjoituksissa 2016 versio 0.8 Oppimateriaali oppilaalle ja opettajalle : GeoGebra oppilaan työkaluna ylioppilaskirjoituksissa 2016 versio 0.8 Piirtoalue ja algebraikkuna Piirtoalueelle piirretään työvälinepalkista löytyvillä työvälineillä

Lisätiedot

MATEMATIIKAN KOE, LYHYT OPPIMÄÄRÄ HYVÄN VASTAUKSEN PIIRTEITÄ

MATEMATIIKAN KOE, LYHYT OPPIMÄÄRÄ HYVÄN VASTAUKSEN PIIRTEITÄ MATEMATIIKAN KOE, LYHYT OPPIMÄÄRÄ 24.9.2019 HYVÄN VASTAUKSEN PIIRTEITÄ Alustavat hyvän vastauksen piirteet on suuntaa-antava kuvaus kokeen tehtäviin odotetuista vastauksista ja tarkoitettu ensisijaisesti

Lisätiedot

isomeerejä yhteensä yhdeksän kappaletta.

isomeerejä yhteensä yhdeksän kappaletta. Tehtävä 2 : 1 Esitetään aluksi eräitä havaintoja. Jokaisella n Z + symbolilla H (n) merkitään kaikkien niiden verkkojen joukkoa, jotka vastaavat jotakin tehtävänannon ehtojen mukaista alkaanin hiiliketjua

Lisätiedot

Riemannin pintojen visualisoinnista

Riemannin pintojen visualisoinnista Riemannin pintojen visualisoinnista eli Funktioiden R R kuvaajat Simo K. Kivelä 7.7.6 Tarkastelun kohteena olkoon kompleksimuuttujan kompleksiarvoinen funktio f : C C, f(z) = w eli f(x + iy) = u(x, y)

Lisätiedot

Koordinaatistot 1/6 Sisältö ESITIEDOT: reaaliluvut

Koordinaatistot 1/6 Sisältö ESITIEDOT: reaaliluvut Koordinaatistot 1/6 Sisältö Koordinaatiston ja koordinaattien käsite Geometrisissa tehtävissä ja siten mös monissa kätännön ongelmissa on usein tarpeen ilmoittaa pisteiden sijainti jonkin kiinteän vertailussteemin

Lisätiedot

Kuvaus. Määritelmä. LM2, Kesä /160

Kuvaus. Määritelmä. LM2, Kesä /160 Kuvaus Määritelmä Oletetaan, että X ja Y ovat joukkoja. Kuvaus eli funktio joukosta X joukkoon Y on sääntö, joka liittää jokaiseen joukon X alkioon täsmälleen yhden alkion, joka kuuluu joukkoon Y. Merkintä

Lisätiedot

4. Käyrän lokaaleja ominaisuuksia

4. Käyrän lokaaleja ominaisuuksia 23 VEKTORIANALYYSI Luento 3 4 Käyrän lokaaleja ominaisuuksia Käyrän tangentti Tarkastellaan parametrisoitua käyrää r( t ) Parametrilla t ei tarvitse olla mitään fysikaalista merkitystä, mutta seuraavassa

Lisätiedot

M 1 ~M 2, jos monikulmioiden vastinkulmat ovat yhtä suuret ja vastinsivujen pituuksien suhteet ovat yhtä suuret eli vastinsivut ovat verrannolliset

M 1 ~M 2, jos monikulmioiden vastinkulmat ovat yhtä suuret ja vastinsivujen pituuksien suhteet ovat yhtä suuret eli vastinsivut ovat verrannolliset Yhdenmuotoisuus ja mittakaava Tasokuvioiden yhdenmuotoisuus tarkoittaa havainnollisesti sitä, että kuviot ovat samanmuotoiset mutta eivät välttämättä samankokoiset. Kahdella yhdenmuotoisella kuviolla täytyy

Lisätiedot

x + 1 πx + 2y = 6 2y = 6 x 1 2 πx y = x 1 4 πx Ikkunan pinta-ala on suorakulmion ja puoliympyrän pinta-alojen summa, eli

x + 1 πx + 2y = 6 2y = 6 x 1 2 πx y = x 1 4 πx Ikkunan pinta-ala on suorakulmion ja puoliympyrän pinta-alojen summa, eli BM0A5810 - Differentiaalilaskenta ja sovellukset Harjoitus, Syksy 015 1. a) Funktio f ) = 1) vaihtaa merkkinsä pisteissä = 1, = 0 ja = 1. Lisäksi se on pariton funktio joten voimme laskea vain pinta-alan

Lisätiedot

MAA15 Vektorilaskennan jatkokurssi, tehtävämoniste

MAA15 Vektorilaskennan jatkokurssi, tehtävämoniste MAA15 Vektorilaskennan jatkokurssi, tehtävämoniste Tason ja avaruuden vektorit 1. Olkoon A(, -, 4) ja B(5, -1, -3). a) Muodosta pisteen A paikkavektori. b) Muodosta vektori AB. c) Laske vektorin AB pituus.

Lisätiedot

Lineaarikuvauksen R n R m matriisi

Lineaarikuvauksen R n R m matriisi Lineaarikuvauksen R n R m matriisi Lauseessa 21 osoitettiin, että jokaista m n -matriisia A vastaa lineaarikuvaus L A : R n R m, jolla L A ( v) = A v kaikilla v R n. Osoitetaan seuraavaksi käänteinen tulos:

Lisätiedot

= = = 1 3.

= = = 1 3. 9. 10. 2008!"$#&%(')'*,#.-/* P1. lkuperäisen punaisen kuution pinta koostuu kuudesta 3 3-neliöstä, joten sen ala on 6 3 2 = 54. Koska 3 3 =, kuutio jakautuu leikatessa yksikkökuutioksi, joiden kokonaispinta-ala

Lisätiedot