Grafické transformace

Z Wikipedie, otevřené encyklopedie

Skočit na: Navigace, Hledání

Grafické transformace jsou transformace používané při přípravě scény. Transformace jsou aplikovány na bod. Transformace objektu je aplikace transformace na všechny jeho body.

Dále uvažujme dvojrozměrný prostor s počátkem v [0,0], bod \mathbf{P[X,Y]} a bod \mathbf{P'[X',Y']}, který vznikl z \mathbf{P} aplikací transformace \mathbf{T}.

Obsah

[editovat] Homogenní souřadnice

Homogenní souřadnice umožnují reprezentovat veškeré grafické operace jako násobení matic. Rotaci a Scaling ve 2D lze reprezentovat jako násobení P maticí 2x2, Translaci však nikoli, proto se zavádí třetí, homogení, souřadnice.

\mathbf{P} v homogenních souřadnicích má souřadnice [x,y,ω] právě tehdy, když platí:

          X = \frac{x}{\omega} 
          Y = \frac{y}{\omega}

Souřadice ω se nazývá váha bodu. ω se často volí rovna 1.

Při zvoleném ω jsou tedy homogenní souřadnice \mathbf{P_h}=[\omega X,\omega Y,\omega].

[editovat] Elementární transformace

[editovat] Rotace

Rotací rozumíme otočení bodu kolem středu vztažné soustavy o daný úhel. Rotace je určena pouze úhlem α.

\mathbf{P'} = [X cos(\alpha) - Y sin(\alpha),X sin(\alpha)+Y cos(\alpha) ].

Transformační matice pro rotaci : 
\mathbf{R} = 
\begin{pmatrix}
cos(\alpha)&sin(\alpha)&0\\
-sin(\alpha)&cos(\alpha)&0\\
0&0&1\\
\end{pmatrix}

[editovat] Scaling

Scaling je transformace změny měřítka. Je určena změnou velikosti podle souřadnicových os [Sx,Sy]. \mathbf{P'} = [X * S_x,Y * S_y]. Transformační matice pro změnu měřítka : 
\mathbf{S} = 
\begin{pmatrix}
S_x&0&0\\
0&S_y&0\\
0&0&1\\
\end{pmatrix}

Jsou-li koeficienty [Sx,Sy] záporné, dochází ke "změně měřítka v opačném směru", t.j. ke středové symetrii.

Pokud je Sx = Sy, je možné se stejným efektem použít matici


\mathbf{S} = 
\begin{pmatrix}
1&0&0\\
0&1&0\\
0&0&S_x\\
\end{pmatrix}
Tzn. nastavením homogenní souřadnice lze dosáhnout změny měřítka.

[editovat] Translace

Translace je transformace posunu. Je určena vektorem posunutí \vec{p} =[p_x, p_y], který udává, kterým směrem a jak daleko bude bod posunut.

T.j. \mathbf{P'} = P + \vec{p} .

Transformační matice pro posun: 
\mathbf{T} = 
\begin{pmatrix}
1&0&0\\
0&1&0\\
P_x&P_y&1\\
\end{pmatrix}

[editovat] Shear

Shear je transformace zkosení. Je určena mírou zkosení ve směrech souřadnicových os [Zx,Zy].

\mathbf{P'} = [X + Z_x Y,Y + Z_y X ].

Transformační matice pro zkosení: 
\mathbf{SH} = 
\begin{pmatrix}
1&Z_x&0\\
Z_y&1&0\\
0&0&1\\
\end{pmatrix}

[editovat] Skládání transformací

Transformace lze skládat do jediné matice postupným násobením elementárními transformacemi \mathbf{A} , což ve svých důsledcích vede na zrychlení vykreslování. Protože násobení matic není komutativní, záleží na pořadí v kterém se transformace provádějí. Pokud používáme notaci \mathbf{P'} = PA, násobíme matice zprava.

[editovat] Projekce

Při zobrazování 3D objektů na 2D zařízení, je třeba stanovit způsob, kterým se toto zobrazení provede. Tímto způsobem je projekce.

Dále uvažujme průmětnu jako rovinu danou rovnicí Z = 0 t.j. rovinu procházející [0,0,0] a kolmou na osu Z. Projekce popisuje, kde paprsek( přímka pocházející P a průmětnou ) protne průmětnu, tzn. který pixel na displeji se rozsvítí.

Projekci lze, jako každou transformaci vyjádřit maticí. Tato bude přirozeně 4*4, neboť se jedná o 3D transformaci.

[editovat] Paralelní

Rovnoběžné promítání je de facto nárysem scény - dochází pouze k zanedbání souřadnice Z. Všechny paprsky svírají s průmětnou stejný úhel, obvykle \frac{\pi}{2}.

Transformační matice pro paralelní projekci: 
\mathbf{Pxy} = 
\begin{pmatrix}
1&0&0&0\\
0&1&0&0\\
0&0&0&0\\
0&0&0&1\\

\end{pmatrix}

[editovat] Perspektivní

Při středovém promítání jsou všechny parsky svedeny do středu promítání - Vzdálenější objekty se jeví menší, rovnoběžky se sbíhají. Rozlišují se

  • Jednoúběžníková
  • Dvouúběžníková
  • Tříuúběžníková

A to podle toho, kolik souřadnicových os průmětna protíná.


Pokud střed projekce je S[0,0,0], a průmětna v rovině xy procházející bodem [0,0,d]

pak transformační matice pro perspektivní projekci je: 
\mathbf{Pxy} = 
\begin{pmatrix}
1&0&0&0\\
0&1&0&0\\
0&0&1&0\\
0&0&\frac{1}{d}&0\\
\end{pmatrix}