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 (x) = 0elimuuttujan x arvolla x = b/2a. Määritä se muuttujan t arvo, jolla suoran l : P + tu piste on lähinnä pistettä Q. Vihje: Katso mallia leikkauslaskelmista ja laske funktion f(t) = d 2 (P +tu,q) minimikohta. 2. Esitetään valonsäteet puolisuorina muodossa P + tu, u = 1 ja t 0, missä u on säteen suunta ja P lähtöpiste. Tarkastellaan säteen heijastumista tasosta kaksiulotteisesti. Laske mihin pisteeseen osuu y-akselilla valonsäde, joka lähtee origosta suuntaan (1, 2) ja heijastuu suorasta ) 1 2 l : (X (3,3)) ( ( 1, 1) = 0.? l 3. Määritä valonsäde, joka saadaan, kun origosta suuntaan (1, 2) lähtevä valonsäde heijastuu pallosta S, jonka keskipiste on (4,5) ja säde 2. Pallon pinnan normaali leikkauspisteessä on tietenkin pallon keskipisteestä leikkauspisteeseen menevän vektorin suuntainen. S 4. Johda projektion avulla kuvaus, jolla voidaan skaalata avaruutta annetun suuntavektorin u suuntaisesti kertoimella s. 1
5. Ohjelmointiympäristö. Tällä kurssilla tutustutaan grafiikan tuottamiseen OpenGL 4.0 ohjelmointirajapinnan avulla. Harmillinen asia on se, että sellaiset opiskelijat, joiden tietokoneen näyttökortti ei tue DirectX10/OpenGL 3.3 määritystä, eivät voi kääntää/ajaa ohjelmia. Tämä seikka ei kuitenkaan estä tehtävien tekemistä. Vanhempaa OpenGL määritystä ei käytetä, koska se poistuu vähitellen käytöstä. Lue osoitteesta http://openglbook.com kohta read the preface. Jos sinulla ei ole C/C++ kääntäjää, niin asenna jokin luvun lopussa mainittu kääntäjä koneellesi. Asenna myös freeglut ja glew kirjastot. Lue sen jälkeen luku 1 ja kokeile kääntää sivulta löytyvä esimerkkiohjelma. Vastaa lyhyesti seuraaviin kysymyksiin. Mikä tehtävä on freeglut ja glew kirjastoilla? Mitä tarkoittaa Shader ohjelma? Mikä merkittävä etu saavutetaan ns. buffer objekteilla? 6. Luennoilla on käsitelty 3 3-matriisien käyttöä mm. kiertoihin, vääntöihin ja skaalauksiin, jotka ovat kaikki kääntyviä kuvauksia. On kuitenkin joitakin kuvauksia, jotka eivät ole kääntyviä, mutta ovat siitä huolimatta hyödyllisiä etenkin johdettaessa matriiseja, jotka tuottavat haluttuja kuvauksia. Ohessa tarkastellaan vektoriprojektion, vektorin kohtisuoran projektion tasolle ja ristitulon esittämistä matriisikertolaskun avulla. Perustele, että projektiot voidaan laskea 3 3-matriiseilla seuraavasti: ) Proj u v : uut u 2v, Proj u (I v : uut v. u 2 Kun u on yksikkövektori,kaavat saavat miellyttävätmuodot uu T ja I uu T. Perustele lisäksi, että myös ristitulo voidaan laskea 3 3-matriisilla: 0 u 3 u 2 u v : Skew(u)v = u 3 0 u 1 v. u 2 u 1 0 7. JohdaedellisentehtäväntulostenperusteellamatriisiS u,s,jokaesittäätehtävän 4 kuvausta. 2
8. Jotta voidaan määrittää leikkaako esim. suora kolmiota, pitää ensin määrittää piste, jolla suora leikkaa kolmion tai monikulmion määräämää tasoa. Ensin tietenkin on määritettävä monikulmion määräämä taso. Määritä sen tasonyhtälö,jonkapisteetp = (1,0,0),Q = (0,1,0),R = (0,2,3)määräävät, muodossa (X S) n = 0. Vihje: Käytä ristituloa. Vektoriprojektioista Määritellään vektorin v vektoriprojektio vektorille u ja vektorin u virittämän R 3 aliavaruuden komplementtiavaruudelle (eli yksikertaisesti kohtisuora projektio sille origon kautta kulkevalle tasolle, jonka normaali u on) seuraavasti: Proj u v = u v u 2u, Proj u v = v Proj uv. Projektioille pätee Proj u v u, Proj u v u ja v = Proj u v +Proj u v eli ne jakavat vektorin v kahteen osaan, joista toinen on kohtisuora vektorin u kanssa ja toinen sen suuntainen. Vrt. kuva Proj u v v Proj u v u Todistetaan tässä kohta Proj u v u: ( (Proj u v) u = v v u ) u 2u u = v u v u u 2(u u) = v u v u = v u v u = 0. u 2 u 2 Suoran ja tason leikkaus Esitetään suora muodossa l : X = P +tu ja taso muodossa (X Q) n = 0. { (X Q) n = 0 X = P +tu (P +tu Q) n = 0 (P Q) n+t(u n) = 0 t = (P Q) n u n 3 = (Q P) n u n
Kun suora on tason suuntainen on u n = 0. Tällöin, jos suoran piste P toteuttaa tason yhtälön eli (P Q) n, on leikkaus koko suora, muutoin taso ja suora eivät leikkaa. Pallon ja suoran leikkaus Esitetään suora l muodossa l : P + tu, u = 1 ja pallo S muodossa S : d 2 (X,Q) = r 2, missä d 2 (X,Q) on etäisyyden neliö ja r 2 on pallon säteen neliö. Säteen ja etäisyyden korottaminen toiseen potenssiin ei aina ole välttämätöntä, mutta usein on helpompaa laskea etäisyyden neliöllä kuin itse etäisyydellä. Nyt yhtälö saa muodon X Q 2 = (X Q) (X Q) = r 2. { d 2 (X,Q) = r 2 X = P +tu d 2 (P +tu,q) = P +tu Q 2 = r 2 (P +tu Q) (P +tu Q) = r 2 (P Q+tu) (P Q+tu) = r 2 (P Q) (P Q+tu)+tu (P Q+tu) = r 2 (P Q) (P Q)+(P Q) (tu)+(tu) (P Q)+(tu) (tu) = r 2 P Q 2 +2t(u (P Q))+ u 2 t 2 = r 2 P Q 2 +2t(u (P Q))+t 2 = r 2 t 2 +2t(u (P Q))+ P Q 2 r 2 = 0 t = 2(u (P Q))± 4(u (P Q)) 2 4( P Q 2 r 2 ) 2 t = (u (P Q))± (u (P Q)) 2 P Q 2 +r 2 Jos neliöjuuren alla oleva lauseke on < 0, niin suora ei leikkaa palloa. Kun suoran muoto on sellainen, että u 1, niin lauseke saa muodon: t = (u (P Q))± (u (P Q)) 2 u 2 P Q 2 + u 2 r 2 u 2. 4
Vektoritulojen ominaisuuksia (DP1) u v = v u (CP1) u v = v u (DP2) u (v+w) = u v+u w (CP2) u (v+w) = u v+u w (DP3) (αu) v = α(u v) (CP3) (αu) v = α(u v) (DP4) u u = 0 u = Θ (CP4) u (v w) = (u v) w u v u v = 0 u v u v = Θ u v u,v Olkoon vektoreiden u ja v välinen kulma α. Tällöin seuraavat yhtälöt ovat voimassa: u v = u v cosα, u v = u v sinα. 5