Premietanie

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é
  • stredové
  • axonometrické

Rovnobežné premietanie

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:

  • kolmé premietanie (pravouhlé)
  • šikmé (kosouhlé)

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.

alt="Your browser understandsthe  APPLET tag but isn't running the applet, for some reason." Your browser is completely ignoring the  APPLET tag! 

Kolmé rovnobežné premietanie


Š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.

alt="Your browser understandsthe  APPLET tag but isn't running the applet, for some reason." Your browser is completely ignoring the  APPLET tag! 

Applet : Šikmé rovnobežné premietanie jednotkovej kocky, interakcia dovoľuje
meniť uhol alfa (klavesa 1 +, 2 -) a veľkosť a (3 +, 4-)


Š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

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

alt="Your browser understandsthe  APPLET tag but isn't running the applet, for some reason." Your browser is completely ignoring the  APPLET tag! 

Applet : Stredové premietanie, pohľad zboku

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)     vzdial

z 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.

alt="Your browser understandsthe  APPLET tag but isn't running the applet, for some reason." Your browser is completely ignoring the  APPLET tag! 

Applet : Stredové premietanie, interakcia klávesy :
1 : vzdial=vzdial+2; 
2 :vzdial=vzdial-2;
3 : vzdial_x=vzdial_x+2;
4 :vzdial_x=vzdial_x-2;
5 : vzdial_y=vzdial_y+2;
6 : vzdial_y=vzdial_y-2;
7 :y_stred=y_stred+2;
8 :y_stred=y_stred-2;
9 : x_stred=x_stred+2;
0 : x_stred=x_stred-2;

Axonometrické premietanie

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.


alt="Your browser understandsthe < APPLET tag but isn't running the applet, for some reason." Your browser is completely ignoring the < APPLET tag! 

Applet: Axonometrické premietanie

Typy axonometrie

        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