RF5100 Lineær algebra Leksjon 9 Lars Sydnes, NITH 11. november 2013
I. DATASKJERMEN
DATASKJERMEN (0, 0) x (wp os x, wp os y ) y winres x (wcenter x, wcenter y ) winres x (devres x, devres y ) Merk: Det forekommer også andre valg av origo og x, y-retning. Måleenhet: Piksler.
DATASKJERMEN - FYSISKE DIMENSJONER winp hys y devp hys y winp hys x devp hys x piksel-sideforhold = pixp hys x pixp hys y = devp hys x devres x devp hys y devres y = devp hys x devp hys y devres y devres x Dette forholdet er som hovedregel men ikke alltid 1 : 1 Unntak: (i) De fysiske pikslene kan faktisk ha et annet sideforhold. (ii) Man rendrer til en buffer som har annen oppløsning enn skjermen.
II. VIEW FRUSTRUM
FIELD OF VIEW ZOOM (FIGUR: f.eks lærebokas figur 10.5,10.5) Field of view: fov. Zoom: Z 1 = tan fov x Z x 2 1 = tan fov y Z y 2 fov x = 2 atan 1 Z x, fov y = 2 atan 1 Z y, fov og Z er to likeverdige størrelser for å angi synsfeltets vidde. Vi har her eksplisitte formler for å regne ut fov fra Z og omvendt.
FORHOLD MELLOM HORISONTAL OG VERTIKAL ZOOM For at skjermbildet skal ha riktige proporsjoner i x- og y-retning, er det viktig at horisontal og vertikal fov avstemmes med skjemens dimensjoner. Kravet er at tan fov x 2 tan fov y 2 = winp hys x winp hys y (TIPS: Tegn figur. Ta utgangspunkt i fig 6.9, 10.4,10.5) På den ene siden er tan fov x 2 tan fov y 2 = 1 Z x 1 Z y = Z y Z x. På den annen side: winp hys x winp hys y = winres x pixp hys x winres y pixres y = winres x winrex y piksel-sideforhold
VIEW FRUSTRUM View frustrum er den delen av verden som vi ønsker å ta med i rendringen, og består av punkter P = (x, y, z) +kamera der (i) P innenfor horisontal fov, d.v.s mellom planene z = Z x x (høyre), z = Z x x (venstre) (ii) P innenfor horisontal fov, d.v.s mellom planene z = Z y y (topp) z = Z y y (bunn). (iii) P ligger mellom to plan z = n (nær-planet), og z = f (fjern-planet), der n < f. Kortfattet versjon: Z x x z Z x x, Z y y z Z y y, n z f.
III. SKJERMKOORDINATER
NORMALISERTE SKJERMKOORDINATER Overgang fra kamerakoordinater (x, y, z) i view frustrum til normaliserte skjermkoordinater (N x, N y ): N y y = 1 x = 1 x = 1 N x y = 1 N x = Z xx z N y = Z yy z (jfr. fig 6.8 i læreboka og ligning (6.12))
FRA NORMALISERTE SKJERMKOORDINATER TIL FYSISKE SKJERMKOORDINATER. Her skal vi beregne skjermkoordinatene dev x, dev y tilsvarende de normaliserte skjermkoordinatene N x, N y : dev x = wincenter x + winres x N x 2 dev y = wincenter y winres y N y 2 Mrk: Negativt fortegn i y-formelen.
IV. BEREGNING AV CLIP-KOORDINATER
4-VEKTORER Punktet (x, y, z) 4-vektoren [x, y, z, 1] 4-vektoren [x, y, z, w] punktet ( x w, y w, z w) om w 0. Mange typer hardware tilrettelegger for bruk av 4-vektorer. Ved omregning til skjermkoordinater o.l. vil man alltid dividere x, y, z-verdiene med w. w-komponenten gir oss en billig divisjon. Filosofi: Istedenfor å gjøre mange dyre divisjoner underveis, oppdaterer vi w og sparer divisjonen til slutt.
CLIP-KOORDINATER For å legge til rette for clippingen, altså prosessen der man skjærer bort overflødig geometri, må man transformere kamerakoordinatene (x, y, z) om til clip-koordinater (C x, C y, C z ). Dette gjøres på en slik måte at view frustrum omformes til kuben 1 C x, C y, C z 1. Om man bruker 4-vektor-notasjonen [x, y, z, w ] formulerer vi det slik: w x, y, z w, i.e. 1 x /w, y /w, z /w 1.
CLIP-MATRISEN PROJEKSJONSMATRISEN Clip koordinatene C x = x w C y = y w C z = z w er (med de konvensjonene vi følger) bestemt slik: [x, y, z, w ] = [x, y, z, 1] M, der M er clip-matrisen (projeksjonsmatrisen): D.v.s: M = Z X Z y f+n f n 1 2nf f n x = Z x x, y = Z y y, w = z, z = f + n f n z 2nf f n.
OVERGANG FRA CLIP-KOORDINATER TIL NORMALISERTE SKJERMKOORDINATER Dette er trivielt: N x = C x = x w, N y = C y = y z. Det er fristende å tenke at clip-koordinatene er et unødvendig mellomledd. Dersom vi ønsker å forstå overgangen fra view-frustrum til skjermen, behøver vi ikke gå via clip-koordinater. Clip-koordinatene kommer inn i bildet som en del av optimaliseringen av clipping-prosessen.
V. OVERSIKT
OVERSIKT View Frustrum (x, y, z) [x, y, z, 1] Clip-matrise Clip koordinater (C x, C y, C z ) [x, y, z, w ] N x = Zx x z et.c N x = C x et.c Normaliserte skjerm-koordinater (N x, N y ) dev x = wc x + wresx 2 N x et.c. Fysiske skjerm-koordinater (phys x, phys y )