Premietanie (projekcia) v počítačovej grafike znamená transformáciu trojrozmerného priestoru (3D) do dvojrozmerného (2D). Priemetňou nazývame rovinu v priestore, do ktorej transformujeme (premietame) objekty. Najčastejšie sa používajú nasledujúce spôsoby premietania :
Rovnobežné premietanie je transformácia trojrozmerného priestoru do roviny. Pri tomto premietaní sú všetky premietajúce lúče rovnobežné. Je zadané priemetňou (rovinou) a smerom premietania (vektorom), ktoré nemôže byť rovnobežné s priemetňou. Podľa smeru premietania delíme rovnobežné premietanie:
Najčastejšie sa používa kolmé premietanie, pri ktorom sú premietacie lúče kolmé na priemetňu. Metóda kolmého priemetu zanedbáva jednu zo súradníc.
Kolmé rovnobežné premietanie do roviny xy zanedbáva z-ovú súradnicu. Bodu P =(x, y, z) zodpovedá v priemete bod P` = (x, y). Maticový tejto zápis transformácie transformácie je :
| 1 0 0 0 |
Tkxy = | 0 1 0 0 |
| 0 0 0 0 |
| 0 0 0 1 |
Takto získaný priemet (tj. to čo dostaneme na priemetni ) predstavuje pôdorys premietaného objektu. V prípade, že premietame do roviny xz a teda zanedbávame y-ovú súradnicu premietaného objektu, dostaneme nárys objektu a v prípade premietania do roviny yz to bude bokorys.
Šikmé rovnobežné premietanie bodu (x, y, z) do roviny xy môžeme vyjadriť :
x' = x + z. (a.cos(a)),
y' = y + z. (a.sin(a)),
kde parameter a
určuje predĺženie pre os z a uhol a odchýlku
od osi x. Ak parameter a=0 tak ide o kolmé premietanie.
Šikmé premietanie do roviny xy môžeme vyjadriť nasledujúcou maticou:
| 1 0 0 0 |
Txy = | 0 1 0 0 |
| a.cosα a.sinα 0 0 |
| 0 0 0 1 |
Stredové premietanie je dané priemetňou a stredom
premietania. Pri tomto premietaní vychádzajú všetky premietacie lúče z
jedného bodu, ktorý nazývame stredom premietania. Toto premietanie vytvára
obraz podobný ako vidí ľudské oko v reálnom svete. Objekty, ktoré sú ďalej
sú menšie. Tento typ premietania nezachováva rovnobežnosť úsečiek. Priemetne
úsečiek, rovnobežných v trojrozmernom priestore sú mimobežné okrem prípadu
keď úsečka leží v rovine rovnobežnej s priemetňou.
Majme bod v 3D so súradnicami
(x, y, z) , ktorých chceme zobraziť v 2D. Ukážme si to na nasledujúcom
applete
Kde z je vzdialenosť od stredu priemetne (v našom prípade obrazovky), vzdial
je vzdialenosť oka (pozorovateľa) od priemetne. R je obraz 3D bodu v 2D sústave.
Body A a B sú pomocné body. V applete sú dva trojuholníky, ktoré sú podobné.
Sú to Oko A P a Oko B R. Z podobnosti trojuholníkov môžeme napísať
transformačné rovnice :
x x' y y' ---------- = --------- a ------------ = --------, (z+vzdial) vzdial (z+vzdial) vzdialz ktorých dostaneme základné transformačné rovnice:
x' = vzdial * x / ( z+vzdial ) y' = vzdial * y / ( z+vzdial )
Premenná vzdial sa obvykle
volí 256 (výpočet vzdial * x alebo y sa počíta ako x SHL
8, tj. sa shiftuje
o 8 bitov doľava).
Tieto rovnice však predpokladajú, že oko pozorovateľa je rovnobežné s osou z a zároveň, že na nej leží. Po pridaní stredu pozorovateľa dostaneme :
x'= vzdial * (x + vzdial_x ) / (z + vzdial) + x_stred y'= - vzdial * (y + vzdial_y ) / (z + vzdial) + y_stred ,
kde vzdial_x a vzdial_y sú koordináty
pozorovateľne [vzdial_x,vzdial_y,vzdial]. Premenné x_stred a
y_stred
sú definované tak, aby došlo k posunu obrazu z [0,0] do [x_stred,y_stred],
čo je väčšinou stred okna (priemetne) (napr. pri okne 320x200 to je 160x100).
Maticovo môžeme vyjadriť:
| 1 0 0 0 |
M = | 0 1 0 0 |
| 0 0 1 1/d |
| 0 0 0 1 |,
kde d = vzdial.
Uvažujme o rovinnej súradnicovej sústave SXY, kde
S je stred obrazovky. Pre zobrazenie priestorovej súradnicovej sústavy Oxyz, zvoľme pre jednoduchosť osi
z a y totožné a tiež aj body O a S.
Zvoľme si jednotkové dĺžky so stredom v 0 pre každú z osí x, y, z a označme
ich jx ,jy ,jz. Koncové body týchto dĺžok budú body Px, Qy, Rz so
súradnicami p1, p2 resp. q1, q2 a r1, r2 .
Zoberme bod A so súradnicami xa, ya, za v sústave
Oxyz. Zobrazenie tohto bodu na obrazov*ku tj. do súradnicovej sústavy SXY
nám určuje dvojica transformačných rovníc premietania :
Xp =
xa*p1 + ya*q1
Yp = xa*p2 + ya*q2 +
za*r2
Body Xp a Yp reprezentujú súradnice bodu A na obrazovke. Takýto bod nazývame priemetom bodu A. Zobrazenie, ktorého výstupom je priemet bodu nazývame premietaním.
isometry
všeobecná axonometria
p1= -0.87 q1= 0.87
p1= -0.7 q1= 0.8
p2= -0.5 q2= -0.5 r2= 1 p2= -0.3 q2= -0.2 r2= 0.8
general axonometry 2
vojenská axonometria
p1= -0.8 q1= 0.7
p1= -0.71 q1= 0.71
p2= -0.25 q2= -0.3 r2= 0.9 p2= -0.71 q2= -0.71 r2= 1
projection from the left
šikmé premietanie sprava
p1= -0.43 q1= 1
p1= - 1 q1= 0.43
p2=
- 0.25 q2=
0 r2= 1 p2= 0
q2= -0.25 r2= 1