\chapter{Transformations géométriques et coordonnées homogènes}
{\bf On se place dans le cadre des coordonnées homogènes (à 4 composantes).  Il est possible de définir toute transformation affine par une simple multiplication matricielle~:
\begin{equation}[x,y,z,1] \cdot \left [ \begin{array}{cccc}a & b & c & 0 \\ d & e & f & 0 \\ g & h & i & 0 \\ j & k & l & 1\\ \end{array} \right ]\end{equation}
 
 Lors de la transformation des coordonnées utilisateur vers les coordonnées écran, un dispositif d'affichage concatène habituellement trois matrices :
 \begin{equation}M = M_v \cdot M_{proj\_persp} \cdot M_s\end{equation}
 
 La première de ces matrices ($M_v$) est une matrice de passage des coordonnées utilisateur (point de vue) vers des coordonénes universelles par des translations et rotations, telles que l'on regarde dans le sens de $z$-négatif et que l'observateur se soit situé à l'origine.
 
 La seconde matrice ($M_{proj\_persp}$) est une mtrice dite perspective (en projection centrale) qui ramène les coordonnées précédentes vers le volume canonique $[-1,1]^3$.
 
 La dernière ($M_s$) est une matrice de projection qui ramène dans les coordonnées 2D de l'appareil (coordonnées entières et positives).
 
 On s'intéresse ici à la matrice suivante :
 \begin{equation}
 M_{proj\_persp} = \left (
 \begin{array}{cccc}
 \dfrac{2n}{r-l} & 0 & 0 & 0 \\
 0 & \dfrac{2n}{t-b} & 0 & 0 \\
 \dfrac{l+r}{l-r} & \dfrac{b+t}{b-t} & \dfrac{f+n}{n-f} & 1 \\
 0 & 0 & \dfrac{2fn}{f-n} & 0 \\
 \end{array}
 \right )
 \end{equation}
}
\section{Dans la matrice (3.1), quelles sont les composantes qui définissent la partie \og translation\fg\ de la transformation ?}
Les 3 premières lignes de la quatrième colonne définissent la partie translation de vecteur $\vec{v} = \left(x,y,z\right)^T = (0,0,1)^T$
\section{A quoi Correspondent les variables $n,f,r,l,b,t$ dans la matrice (3.3)?}
Dans le cadre de la projection perspective, un point 3D est dans une pyramide tronquée (à gauche dans le schéma). On veut mapper les points
de cette pyramide dans un cube avec le repère centré (le repère de la scène).

\begin{figure}[htbps]
	\begin{center}
		\includegraphics[scale=.75]{./images/gl_projectionmatrix01.eps}
	\end{center}
\end{figure}

\medskip
Le $n$ correspond à la coordonnée $Z$ de la face la plus proche de l'origine du repère de la vue en perspective ($n$ear) \\
Le $f$ correspond à la coordonnée $Z$ de la face la plus éloignée de l'origine du repère de la vue en perspective ($f$ar) \\
Le $r$ correspond à la coordonnée $X$ du côté droit de la face la plus proche de l'origine du repère ($r$ight)\\
Le $l$ correspond à la coordonnée $X$ du côté gauche de la face la plus proche de l'origine du repère ($l$eft)\\
Le $t$ correspond à la coordonnée $Y$ du côté haut de la face la plus proche de l'origine du repère ($t$op)\\
Le $b$ correspond à la coordonnée $Y$ du côté bas de la face la plus proche de l'origine du repère ($b$ottom)
\section{Comment est effectuée l'opération non linéaire qui permet d'effectuer la projection centrale proprement dite ?}
D'abord, on passe par les coordonnées homogènes : supposons que le plan dans lequel on doit projecter est le plan perpendiculaire à l'axe $Z$ et à une
distance $d$ de l'observateur. Supposons également que ce plan soit centré à l'origine. Il suffit de poser : 
\begin{equation}
	\left\{
		x' = \dfrac{x}{1+\frac{z}{d}} ;\\
		y' = 	\dfrac{y}{1+\frac{z}{d}} ;\\
		z' = \dfrac{z}{1+\frac{z}{d}} ; ;
	\right.
\end{equation}
Il suffit alors d'appliquer une matrice de cisaillement par $\frac{1}{d}$ : 
\begin{equation}
	\left(
		\begin{tabular}{c}
			$x'$\\ $y'$\\ $z'$\\$1 + \dfrac{z}{d}$
		\end{tabular}
	\right)
	= 
	\left[
		\begin{tabular}{cccc}
			$1$ & 0 & 0 & 0\\ 
			$0$ & 1 & 0 & 0\\
			 0  & 0 & 1 & 0\\ 
			 0  & 0 & $\dfrac{1}{d}$ & 1
		\end{tabular}	
	\right]	
	\left(
		\begin{tabular}{c}
			$x$\\ $y$\\ $z$\\$1$
		\end{tabular}
	\right)
\end{equation}
\section{Prenons $n=-1; f=-11; l=-1; r=1; b=-1; t=1$.  Construire la matrice et effectuer le changement de coordonnées pour un point situé en $(0,0,5)$.}
Easy : faire $\mathbf{P'} = M (0,0,5,1)^T$
\subsection{Le point résultat est-il situé dans le volume canonique ?}
???
\section{La matrice (3.3) est elle inversible ? (en d'autres termes, a-t-on une bijection entre le volume canonique et le volume de départ ?) Qu'en est-il de la profondeur (coordonnée $z$ après application de la transformation) ? Doit elle encore servir pour l'affichage proprement dit (sur un dispositif 2D comme un écran) ?}
Oui elle l'est, pour s'en convaincre, on peut calculer le déterminant. Elle peut servir pour l'affichage dans le cadre de l'algorithme du z-buffer.