Prostor objektu Tr. objektu Tr. modelu Prostor scény Souřadnicové prostory V V x, y z x, y z z -z x, y Tr. objektu V =V T 1 T n M Tr. modelu Tr. scény x, y Tr. pohledu Tr. scény Tr. pohledu Prostor pozorovatele V -z V =V T 1 T n P Tr. objemu x, y Dehomog. Projekce Prostor průmětny Prostor obrazovky V y x Pom1=V O // transformace objemu Pom2= [Pom1.x/Pom1.w; Pom1.y/Pom1.w; Pom1.z/Pom1.w] // dehomogenizace V =[Pom2.x; Pom2.y] //projekce
Prostor objektu, scény Matice T 1,,T n reprezentují libovolné prosté transformace E 3 E 3. Vřadě úloh nebývají použity. Matice M transformuje objekt ze souřadnic prostoru objektu do souřadnic prostoru scény například posunutí a otočení vůči ostatním objektům scény můžeme tak opakovaným vykreslováním jediného objektu s různými maticemi M pokrýt celou scénu (zalesnění, ).
Transformace pohledu Matice P, tedy transformace pohledu, transformuje všechny objekty ze souřadnic prostoru scény do souřadnic prostoru pozorovatele. Soustava souřadnic pozorovatele (SSP) je popsána v soustavě souřadnic scény (SSS) počátkem S a vektory x, y, z, které určují směry os. Vektory x, y, z jsou po dvou kolmé a jsou normalizované. Na obrázku i v dalším textu je uvažována pravotočivá SSP. x s SSS z s -z S SSP x y y s
Transformace pohledu Nechť bod S a vektory x, y, z mají v SSS po řadě tyto souřadnice [s 1, s 2, s 3 ], (x 1, x 2, x 3 ), (y 1, y 2, y 3 ), (z 1, z 2, z 3 ). Nechť bod A má v SSP souřadnice [a 1 ;a 2 ;a 3 ]. Pak souřadnice bodu A v SSS (označme A ) jsou dány výrazem: A = S+a 1 x+a 2 y+a 3 z, maticově A = S+A B, kde vektory x, y, z tvořířádky matice B (B báze SSP). Při přechodu z prostoru scény do prostoru pozorovatele máme souřadnice bodu A (tedy souřadnice bodu A v SSS) a potřebujeme vypočítat souřadnice bodu A v SSP. Tedy hledáme matici P tak, že A h =A h P, kde A h, A h jsou body A, A doplněné homogenní souřadnicí.
Transformace pohledu Rovnici A = A B+S zprava násobíme maticí B -1, tudíž A B -1 = A B B -1 +S B -1, tedy (protože B B -1 = I) A B -1 = A+S B -1, takže po odečtení S B -1 od rovnice je A = A B -1 -S B -1. Vektory x, y, z (řádky matice B) jsou po dvou kolmé, takže jsou lineárně nezávislé, tudíž je matice B regulární a tím pádem matice k ní inverzní (B -1 ) existuje. B -1 je matice 3x3, -S B -1 je bod (určuje posunutí), takže výraz A B -1 -S B -1 je zápisem lineární transformace bodu A a lze ho tudíž vyjádřit transformační maticí hledanou maticí P.
Transformace pohledu Matice P má potom následující tvar: 0 B -1 0 0 -S B -1 1 Protože vektory x, y, z jsou po dvou kolmé a normalizované, je každý z nich výsledkem vektorového součinu zbývajících dvou (ve správném pořadí) a proto v tomto případě vyjde B -1 =B T.
Transformace pohledu Tedy po dosazení je P rovna: x 1 y 1 z 1 0 x 2 y 2 z 2 0 x 3 y 3 z 3 0 -S x -S y -S z 1 skalární součin bodu S a vektoru z -(s 1 z 1 +s 2 z 2 +s 3 z 3 ) SSP bývá v SSS zadána pozicí oka (S), vektorem směru pohledu pozorovatele (-z) a vektorem, který pozorovatel vidí jako svislý (y). Vektor x je dopočítán vektorovým součinem y z.
Transformace pohledu Nechť E (eye) je pozice pozorovatele, v (view) je vektor pohledu a u (up) je vektor viděný svisle. Potom správné hodnoty S, x, y, z se dopočítají následovně: S = E; z = normalizuj(-v); x = normalizuj(u z); y = z x; normalizovaný vektor má velikost 1 normalizace je vydělení všech souřadnic velikostí vektoru
Transformace pohledu Pozorovatel může být zadán také pozicí a dvěma úhly, azimutem (pohled vlevo, vpravo) a zenitem (pohled nahoru a dolů). Takto zadaný pozorovatel se snadno ovládá. Vektory v a u (viz předchozí snímek) se potom dopočítají následovně: v.x = cos(azimut) cos(zenit); v.y = sin(azimut) cos(zenit); v.z = sin(zenit); u.x = cos(azimut) cos(zenit+π/2); u.y = sin(azimut) cos(zenit+π/2); u.z = sin(zenit+π/2); Pozorovatele ovládáme změnou úhlů ( rozhlížení se ) a přičítáním násobku vektoru v k pozici E (pohyb vpřed a vzad). Je vhodné omezit zenit na interval <-π/2; π/2>.
Transformace zobrazovacího objemu Vzhledem k rozlišení zobrazovacích zařízení (obrazovky) není možné zobrazit celý prostor popsatelný reálnými souřadnicemi. Vždy je zobrazována pouze část prostoru zobrazovací objem. Bod X v prostoru pozorovatele je vidět v průmětně, právě když leží v zobrazovacím objemu. Abychom mohli snadno a jednotně testovat viditelnost, budeme zobrazovací objemy transformovat na objem <-1;1> <-1;1> <0;1>, který nazýváme homogenní ořezávací objem.
Transformace zobrazovacího objemu pravoúhlého promítání Zobrazovací objem pravoúhlého promítání je kvádr se středem na ose z, jehož stěny jsou kolmé k osám a který má šířku w, výšku h, přední stěnu vzdálenou z n (z near) od počátku a zadní stěnu vzdálenou z f (z far) od počátku. Viz obrázek. zobrazovací objem pravoúhlého promítání: -z homogenní ořezávací objem: z z f 1 w h z n x,y -1 1 x,y
Transformace zobrazovacího objemu pravoúhlého promítání Snadno lze odvodit následující matici O: 2/w 0 0 0 0 2/h 0 0 0 0 1/(z n - z f ) 0 0 0 z n /(z n - z f ) 1 Poznámky: w > 0 h > 0 z f > z n > 0
Transformace zobrazovacího objemu středového promítání Zobrazovací objem středového promítání je komolý jehlan s těžištěm na ose z, s přední stěnou vzdálenou z n od počátku a zadní stěnou vzdálenou z f od počátku. Roviny bočních stěn procházejí počátkem, horní a dolní stěna svírají úhel pohledu α. Poměr šířky přední stěny ku jeho výšce označme k. zobrazovací objem středového promítání: -z homogenní ořezávací objem: z z f 1 α z n x,y -1 1 x,y
Transformace zobrazovacího objemu středového promítání Pro středové promítání lze odvodit následující matici O: w 0 0 0 0 h 0 0 0 0 z f /(z n - z f ) -1 0 0 z n z f /(z n - z f ) 0 kde h = cot(α/2); w = k h; Poznámky: α (0; π), k > 0, z f > z n > 0
Výsledná transformace Všechny transformační matice se vynásobí ve správném pořadí do výsledné matice T a tou je zprava vynásoben bod V. Transformace tedy neprobíhají tak, jak je uvedeno na prvním snímku přes pomocné body V, V (to je uvedeno pouze pro ilustraci), ale podle následující ukázky: T = To 1 To n M Ts 1 Ts n P O; Pom1 = V T;
Dehomogenizace Faktická transformace není dokončena, dokud nedošlo ke správné dehomogenizaci. Zanedbání homogenní souřadnice nestačí viz matice transformace objemu středového promítání: v homogenní souřadnici je -z, kterým je nezbytné vydělit všechny souřadnice. Tedy souřadnice bodu, který je výsledkem provedení všech transformací na bod V, jsou následující: Pom2.x = Pom1.x/Pom1.w; Pom2.y = Pom1.y/Pom1.w; Pom2.z = Pom1.z/Pom1.w;
Ořezávání Po provedení dehomogenizace je možné testovat, zda uvažovaný bod V leží v zobrazovacím objemu. To je ověřováno testováním, zda transformovaný bod (Pom2) leží v homogenním ořezávacím objemu: if (Pom2.x<-1 Pom2.x>1 Pom2.y<-1 Pom2.y>1 Pom2.z<0 Pom2.z>1) bod leží mimo zobrazovaný objem a není vidět
Ořezávání Při testu objektu (trojúhelníku) sledujeme, zda maxima souřadnic všech bodů na jednotlivých osách jsou menší než -1 (resp. 0) nebo zda minima jsou větší než 1. Pokud platí alespoň jedna z podmínek (3 pro minimum, 3 pro maximum), pak celý objekt je určitě mimo výřez a ani část není vidět. V opačném případě již část vidět být může ( jistě nic nevíme, tak musíme vykreslit ). Existují přesnější (pomalejší) testy.
Průmětna a obrazovka Vzhledem k proběhlé transformaci zobrazovacího objemu je vlastní projekce vždy pravoúhlé promítání, tedy zanedbání souřadnice z. Souřadnice promítnutých viditelných bodů jsou v rozmezí <-1;1>, osa y je orientována opačně než v případě obrazovky, takže souřadnice ještě převedeme do souřadnic obrazovky. Nechť w a h jsou šířka a výška obrazovky, souřadnice levého horního rohu jsou [0;0]. Pak vykreslujeme na souřadnice x, y podle následujícího předpisu (možno vyjádřit vektorově): x = (w-1) (Pom2.x+1)/2; y = (h-1) (1-Pom2.y)/2;