Kolme erikoismuunnosta Muunnosten yhdistely Affiinimuunnos on ns. kiinteän kappaleen muunnos, jos sen muunnosmatriisi on r 11 r 12 t x r 21 r 22 t y 0 0 1 missä vasemman yläkulman 2 2-osamatriisi on ortogonaalinen: sen pystyvektorit ovat kohtisuorassa toisiinsa nähden ja niiden molempien pituus on 1 säilyttää myös kulmat ja pituudet Ns. shear-muunnoksen muunnosmatriisi on 1 a 0 b 1 0 0 0 1 Esimerkki: tason pisteiden rotaatio θ astetta vastapäivään pisteen [x, y] ympäri tehdään kolmessa vaiheessa: 1. Siirto [ x, y], joka siirtää rotaatiopisteen origoon 2. Rotaatio θ astetta vastapäivään origon ympäri 3. Siirto [x, y], joka siirtää rotaatiopisteen alkuperäiselle paikalleen On tärkeää huomata, että operaatiot pitää tehdä oikeassa järjestyksessä, sillä matriisitulo ei kommutoi Joissakin erikoistapauksissa järjestyksellä ei ole väliä: esimerkiksi kaksi peräkkäistä siirtoa, skaalausta tai rotaatiota voidaan tehdä kummin päin tahansa missä joko a = 0 tai b = 0 Peilaaminen pääakselin suuntaisen tason suhteen on skaalaus negatiivisella kertoimella 232 233 Koordinaatiston siirto 3D-muunnokset Affiinimuunnokset tulkittiin edellä siten, että koordinaatisto pysyy paikallaan, kun tason pisteet liikkuvat Yhtä hyvin voitaisiin ajatella, että pisteet pysyvät paikallaan, mutta koordinaatisto siirtyy, pyörii ja venyy Esimerkki: edellisen kalvon operaatio koordinaatiston muuttamisena tulkittuna: 1. Siirretään koordinaatiston origo tason pisteeseen [x, y] 2. Pyöräytetään koordinaatistoa θ astetta myötäpäivään origon ympäri 3. Siirretään koordinaatiston origo tason pisteeseen [ x, y] Vertaa: PostScriptin komennot trans, scale ja rotate Pisteiden siirtäminen, skaalaus ja rotaatio voidaan yleistää kolmiulotteiseen avaruuteen Rotaatio ei tapahdu enää origon tai muunkaan yksittäisen pisteen ympäri, vaan jonkin pääakselin ympäri oikeakätisessä koordinaatistossa kolme eri muunnosmatriisia sen mukaan, minkä akselin ympäri rotaatio tehdään Myös homogeenisten koordinaattien idea yleistyy suoraan 3D-koordinaatistoon 3D-affiinimuunnosten muunnosmatriisit muodostetaan samoilla periaatteilla kuin 2D-muunnoksissa 234 235
Normaalin muuntaminen Kvaternionit Jos affiinimuunnosta M käytetään muodostamaan kuvaus kappaleesta, ei samaa muunnosta voida suoraan käyttää kappaleen normaalivektoreiden kuvaamiseen niin, että tuloksena saadaan oikeat normaalivektorit oikea muunnosmatriisi on (M 1 ) T Matriisin käänteismatriisi on usein työlästä laskea, mutta sopivasti valittujen affiinimuunnosten erikoistapauksessa helppoa Perusmuunnosten ketjuna määritellyn affiinimuunnoksen käänteismuunnos saadaan suorittamalla perusmuunnosten käänteismuunnokset takaperin Siirtäminen ei vaikuta normaalivektoreihin millään tavalla, ja koska kiinteän kappaleen muunnoksissa pätee M 1 = M T, niin saadaan kätevästi (M 1 ) T =(M T ) T = M Kvaternionit ovat kompleksilukujen laajennos neljään komponenttiin, jotka ovat hyödyllisiä 3D-rotaatioiden kompaktissa esittämisessä Niiden avulla voidaan esim. välttää gimbal lock -ilmiö Kvaternioni ˆq on pari [[q x,q y,q z ],q w ], jossa q v =[q x,q y,q z ] on imaginääri- ja q w kvaternionin ˆq reaaliosa Kvaternionien operaatiot määritellään ˆq + ˆr = [q v + r v,q w + r w ] ˆqˆr = [q v r v + r w q v + q w r v,q w r w q v r v ] ˆq = [ q v,q w ] n(ˆq) = ˆq ˆq ˆq 1 = 1 n(ˆq) ˆq Yksikkökvaternionille pätee n( ˆq) =1 236 237 Kvaternionit rotaatiossa 8. Kolmiulotteinen piirtäminen Jokainen yksikkökvaternioni ˆq voidaan kirjoittaa muodossa ˆq =[sin φ u q, cos φ] jollekin 3D-vektorille u q, jolle u u = 1 Jos homogeenisilla koordinaateilla esitetty 3D-piste p tulkitaan kvaternioniksi ˆp, kvaternioni ˆqˆpˆq 1 tuottaa pisteen, joka on saatu rotatoimalla p kulman 2φ verran vektorin u q ympäri Peräkkäiset rotaatiot voidaan laskea peräkkäisillä kvaternionien kertolaskuilla Kvaternionien kertolasku on tehokkaampaa kuin matriisien, ja lisäksi muunnokset matriiseista kvaternioneihin ja toisinpäin ovat tehokkaita Tässä luvussa tutkimme, miten kolmiulotteinen maailma voidaan kuvata ja esittää kaksiulotteisessa rajoitetussa ikkunassa Kuvaus on jonkin verran monimutkaisempi kuin aiemmin esitetty kaksiulotteisen maailman leikkaaminen rajoitettuun ikkunaan, mutta silti hallittavissa Muunnoksessa viisi vaihetta: 1. Projektiotyypin valinta 2. Katseluparametrien määrittely 3. Kuvaus normalisoituun kuvausavaruuteen 4. Kolmiulotteinen leikkaaminen 5. Projisointi tasolle ja piirtäminen erityisesti ns. Eulerin rotaatiot helppoja 238 239
Tasoprojektiot 3D-kappale kuvataan kaksiulotteiseksi projisoimalla se kuvauspinnalle Ns. projektorit lähtevät projektion keskipisteestä kappaleen kuhunkin pisteeseen, ja niiden leikkauspisteet kuvauspinnalla synnyttävät kappaleen kuvan Perspektiiviprojektiot Perspektiiviprojektiossa projektion keskipisteen ja kuvaustason etäisyys on äärellinen (ja suurempi kuin nolla): Tutkimme tällä kurssilla vain tasogeometrisia projektioita, joissa kuvauspinnat ovat tasoja ja projektorit suoria voidaan toteuttaa matriisikertolaskuilla, tosin projektiomatriisilla ei ole käänteismatriisia Tasoprojektiot jaetaan kahteen luokkaan sen mukaan, ovatko projektorit kohti projektion keskipistettä vai samansuuntaiset: 1. Perspektiiviprojektiot 2. Paralleeliprojektiot Jos kaksi samansuuntaista suoraa eivät ole kuvaustason suuntaisia, niiden projektiot leikkaavat ns. katoamispisteessä Katoamispisteitä on kuvassa periaatteessa äärettömästi, yksi per jokainen kuvaustason suunnasta poikkeava suunta Pääakseleiden suuntaisiin kolmeen suoraan liittyviä katoamispisteitä kutsutaan akselikatoamispisteiksi 240 Näiden lukumäärä (yksi, kaksi tai kolme) riippuu siitä, montako pääakselia kuvaustaso leikkaa, ja tämä lukumäärä kertoo, monenko pisteen perspektiivi on kyseessä 241 Paralleeliprojektiot Paralleeliprojektiossa projektion keskipiste on äärettömän kaukana kuvaustasosta kaikki projektorisuorat yhdensuuntaisia keskenään, joten voidaan puhua projektion suunnasta: Ortografisen projektion erikoistapaus aksonometrinen projektio, jossa projektio ei ole minkään pääakselin suuntainen tämän erikoistapaus vielä isometrinen projektio: projektion suunta muodostaa yhtä suuren kulman jokaisen pääakselin kanssa tasoprojektiot paralleeliprojektiot perspektiiviprojektiot Ortografinen projektio: projektion suunta kuvaustason normaali ortografiset projektiot aksonometriset projektiot isometriset projektiot obliqueprojektiot kabinetti kavaljeeri yhden pisteen kahden pisteen kolmen pisteen vastakohta oblique projektio, erikoisesti kavaljeeriperspektiivissä normaalin ja projektion välinen kulma 45 astetta Demo tyypillinen käyttö koneenpiirustus, arkkitehtuuri jne. 242 243
Kuvausikkunan määrittäminen Kuvausavaruuden rajaaminen Kolmiulotteinen avaruus voidaan kuvata siihen mielivaltaisesti sijoitetulle ikkunalle Esimerkiksi nämä SPHIGS-grafiikkakirjaston parametrit määrittävät kuvausikkunan yksikäsitteisesti: 1. VRP, jokin piste kuvaustasolla 2. VPN, kuvaustason normaali 3. VUP, ylös -suunnan vektori 4. CW, ikkunan keskipiste kuvaustasolla 5. PRP, projektiopiste 6. Näyttöikkunan koko parametreilla vasen alanurkka (u min,v min ) ja oikea ylänurkka (u max,v max ) Kuvausikkunan läpi näkyy maailmasta osa, joka on muodoltaan joko ääretön pyramidi (perspektiiviprojektio) tai ääretön suorakulmainen särmiö (paralleeliprojektio) Kuvauksen helpottamiseksi haluamme, että ikkunasta näkyvä avaruuden osa on äärellinen joissakin tilanteissa tämä rajaa näkyvien kappaleiden määrän äärettömästä äärelliseksi Kuvausikkunan kanssa määritellään kaksi samansuuntaista leikkaustasoa: etu- ja takaleikkaustaso Kappaleista näytetään vain kuvausavaruuden leikkaustasojen väliin jäävässä näkyvässä avaruudessa olevat osat 244 245 Kanoninen kuvausavaruus Kappaleiden projektio voitaisiin tehdä mielivaltaisesti sijoitetulle kuvaustasolle, mutta on tehokkaampaa ensin muuttaa kuvausavaruus ns. normalisoivalla muunnoksella helpommin käsiteltäväksi ns. kanoniseksi kuvausavaruudeksi Aluksi projektion keskipiste siirretään origoon, ja leikkaustaso pyöritetään x- ja y-akseleiden suuntaiseksi Jos projektion suunta ei ole z-akselin suuntainen, käytetään tässä vaiheessa shear-muunnosta tämän pakottamiseen Lopuksi kuvausavaruus siirretään ja skaalataan halutuksi kanoniseksi kuvausavaruudeksi, jonka mittasuhteet on valittu siten, että segmenttien leikkaaminen on tehokasta joko Cohen-Sutherlandin algoritmilla (outcodessa kuusi bittiä neljän sijasta) tai Cyrus-Beckin algoritmilla xy Tehokkuushuomioita Muunnosmatriisi avaruudesta kanoniseen kuvausavaruuteen lasketaan kerralla valmiiksi, jonka jälkeen sitä voidaan käyttää uudelleen jokaiselle kuvattavalle pisteelle Kuvauksen siirto- ja rotaatio-osuudet helppoja laskea, ja yleensä projektio suunnitellaan niin, ettei shear-osuutta tarvita lainkaan Haluttaessa perspektiiviprojektion kanoninen kuvausavaruus voidaan leikkaustarkoituksiin kuvata paralleeliprojektion kanoniseksi kuvausavaruudeksi tästä on etua, sillä jälkimmäisen suhteen leikkaaminen on helppoa, tosin leikkaaminen on tehtävä homogeenisilla koordinaateilla oikeellisuuden takaamiseksi ei kuitenkaan vaikeuta asiaa olennaisesti varsinkin, jos aina w>0 z 246 247
Projektioyhtälöt Vaihtoehtoinen projektio Kun piste x =[x, y, z] on edellisellä muunnoksella kuvattu kanoniseen kuvausavaruuteen, mihin kohtaan projektiotasoa piste kuvautuu? Tehtävä on helppo perspektiiviprojektiolle, kun projektion keskipiste sijaitsee origossa, ja projektiotaso sijaitsee kohtisuorana z-pääakselia poikkeamalla d origosta projektiotason pisteet x p =[x p,y p,d] yhdensuuntaisista kolmioista saadaan (y p vastaavasti) x p d = x z x p = d x = x z z/d z saa olla mitä tahansa paitsi 0 x Joskus oletetaan, että projektiotaso sijaitsee origossa z-pääakselia vastaan, ja projektion keskipiste on [0, 0, d] Tällöin piste [x, y, z] projisoituu x p d = x z + d x p = d x z + d = x (z/d)+1 (kuvauskoordinaatti y p vastaavasti) Tämä sallii projektion keskipisteen loittonemisen mielivaltaisen kauas projektiotasosta, jopa äärettömän kauas tällöin saadaan paralleeliprojektio niin kuin tietysti kuuluukin [x p,y p,z p ]=[x, y, 0] d z 248 249 Mainostaulut 9. Lisää realismia Mainostaulu on avaruuden suorakaide, joka muuttaa asentoaan jonkin maailmasta ja katsojasta riippuvan suureen mukaiseksi Mainostauluja käytetään mm. 2D-spritejen (pieni bittikarttakuva) toteuttamiseen 3D-avaruudessa Kuvaruutuun sovitetun mainostaulun normaali osoittaa aina katsojan silmää kohti, ja sen reunaviivat on käännetty kuvaruudun reunojen suuntaisiksi Edellisen luvun tekniikoilla voidaan piirtää vektorigrafiikan rautalankamalleja kolmiulotteisesta maailmasta Tässä luvussa tutkitaan, miten kuvista saadaan kauniimpia ja realistisempia seuraavilla tempuilla: 1. Piiloon jäävien pintojen poistaminen 2. Pintojen värittäminen ja valaiseminen 3. Erilaiset pintamateriaalit 4. Kappaleiden langettamat varjot 5. Läpinäkyvyys ja heijastukset mainostaulun normaali rotatoidaan katsomissuunnan vastaiseksi ja monikulmion yläreuna kuvaruudun yläreunan suuntaiseksi Maailmaan sovitetussa mainostaulussa monikulmion yläreuna rotatoidaan jonkin vektorin suuntaiseksi Aksiaalinen mainostaulu pyörittää itseään jonkin määrätyn akselin ympäri maksimoiden katsojaan näkyvän projektion alaa 250 251
Piilopintojen poistaminen Tehtävä: kuvausavaruuden kuvaustasolle projisoituvista monikulmioista on piirrettävä vain ne osat, jotka eivät jää piiloon edessä olevien läpinäkymättömien monikulmioiden taakse Operaatio on tehtävä kolmiulotteisessa avaruudessa, sillä kappaleiden projisoiminen kaksiulotteiselle tasolle hävittää niiden väliltä kaiken syvyysinformaation Tämä tehdään yleensä siinä vaiheessa, kun kappaleet on kuvattu normalisoituihin kuvausavaruuksiin Piste p on pisteen q edessä, jos molemmat pisteet sijaitsevat samalla projektorilla, ja p on lähempänä projektion keskipistettä kuin q Piilopintojen ongelmia Pinnan jääminen piiloon ei yleisesti ottaen ole binäärinen ominaisuus, vaan yksittäinen pinta voi olla osittain näkyvissä Pinta saattaa näkyä jopa useana erillisenä, ei-kytkettynä kappaleena jokaisen tekniikan, joka perustuu kappaleiden syvyyslajitteluun ja piirtämiseen kauimmasta lähimpään, täytyy pystyä hajottamaan kappaleet pienempiin osiin On helppo osoittaa, että n kappaleen hajottaminen näkyviin palasiin vie pahimmassa tapauksessa aikaa Ω(n 2 ), vaikka kappaleet olisivat suorakaiteita esimerkissä n/2 vaakasuoraa kaistaa n/2 pystysuoran kaistan päällä O(n 2 ) erillistä näkyvää palasta 252 253 Koherenssi Tärkeitä koherensseja Koherenssi tarkoittaa maailman (tai sen projektion) paikallista jatkuvuutta ja sen lähekkäisten osien samankaltaisuutta siten, että epäjatkuvuuskohtia on suhteellisen vähän koherenssi mahdollistaa maailman hahmottamisen erillisistä kappaleista koostuvaksi, kun epäjatkuvuuskohdat mielletään kappaleiden rajoiksi Koherenssi on tärkeä käsite, joka on tarkkaan katsottuna usein piilo-oletuksena monissa tietokonegrafiikan tekniikoissa ja algoritmeissa Koherenssi mahdollistaa kuvan jollekin osalle tehtyjen laskemien hyödyntämisen kuvan jotakin toista osaa laskettaessa esimerkki: värityksen tai tekstuurin inkrementaalinen laskeminen kappaleen pinnan halki Kappalekoherenssi: jos kappaleet ovat täysin erillisiä, kappaleiden etäisyysvertailun hyvin määrätty tulos on suoraan kappaleiden osien etäisyysvertailun hyvin määrätty tulos Pintakoherenssi: pinnan väri-, valaistus- tms. ominaisuudet muuttuvat tasaisen jatkuvasti pinnan mukana Reunaviivakoherenssi: reunaviiva muuttuu näkyvästä näkymättömäksi tai päinvastoin vain sen tai sen projektion leikatessa jonkin kappaleen Syvyyskoherenssi: pinnan syvyys muuttuu tasaisen jatkuvasti pinnan mukana Vaakaviivakoherenssi: pikselikartan vaakaviivalla näkyvissä olevat kappaleet ja niiden syvyysjärjestys muuttuvat tasaisesti edellisestä vaakaviivasta 254 255