From 7428394962018addd5fcff66fa666196503de117 Mon Sep 17 00:00:00 2001
From: Maik Teurlings <mteur@gmx.net>
Date: Tue, 10 Jun 2008 19:29:26 +0000
Subject:

---
 report/headtracking.tex | 63 ++++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 62 insertions(+), 1 deletion(-)

diff --git a/report/headtracking.tex b/report/headtracking.tex
index d1894a4..cf2280a 100644
--- a/report/headtracking.tex
+++ b/report/headtracking.tex
@@ -1 +1,62 @@
-Head Tracking
+Our main goal for the head tracking, is to render the virtual world
+in perspective with the positions of the eyes. If the eyes are moving
+the perspectives of the virtual world must be changed in a way the
+person thinks he is looking into a "virtual window". To make a
+virtual world we use a view frustum. A view frustum is the region of
+space in the modeled world that may appear on the screen. The frustum
+is a pyramid from the view point to the far plane. The pyramid is
+truncated at the near plane, hence the name frustum. Only the things
+between in the pyramid between the near and far plane is visible from
+the viewpoint. In the figure below you see a scheme of the frustum.
+\begin {center}
+  \includegraphics[width=99.7mm]{img/frustumscheme.png} \\
+  Figure \#\#: Frustum \\
+\end {center}
+In the next figure you see the objects which can be viewed by the
+view point. The green object can be seen totally, the yellow
+partially and the red object can't be seen.
+\begin {center}
+  \includegraphics[width=81.5mm]{img/frustumobjects.png} \\
+  Figure \#\#: Frustum \\
+\end {center}
+ If the viewpoint is moving, the frustum
+will be different. We use the the glFrustum function of the OpenGL
+library to set the frustum at his new values. This is a function who
+multiply the current matrix with a
+perspective matrix. \\\\
+The specification of glFrustum is as follows:
+\begin{verbatim}
+void glFrustum( GLdouble left,
+                GLdouble right,
+                GLdouble bottom,
+                GLdouble top,
+                GLdouble zNear,
+                GLdouble zFar )
+\end{verbatim}
+
+The parameters left and right will specify the coordinates for the
+left and right vertical of the near plane. The parameters bottom and
+top will specify the coordinates for the bottom and top horizontal of
+the near plane. The zNear, zFar Specify the distances to the near and
+far depth clipping planes.
+
+To calculate the left, right, bottom en top we use the coordinates of
+the persons eyes. How the coordinates are retrieved and calculated to
+the world values can be read in the previous chapter. We now set a
+frustum with the near clipping plane at $(-1/2 world width, -1/2
+world height, 0), (1/2 world width, 1/2 world height, 0)$ with the
+eye at position \emph{(Eye Coordinate X, Eye Coordinate Y, Eye
+Coordinate Z)}. But because OpenGL expects the eye at position
+\emph{(0,0,0)} when specifying a frustum, we have to specify our near
+clipping plane with \emph{(- Eye Coordinate X, - Eye Coordinate Y, -
+Eye Coordinate Z)} as its origin, and translate the modelview matrix
+to \emph{(- Eye Coordinate X, - Eye Coordinate Y, - Eye Coordinate
+Z)} , such that the world origin is in the center of the screen. In
+order to allow objects to appear in front of the screen we move the
+near clipping plane closer to the eye position, without changing the
+frustum. Below you see the demo application of the head tracking
+technique.
+\begin {center}
+  \includegraphics[width=100mm]{img/HeadTrackScreenShot.png} \\
+  Figure \#\#: The head track demo application \\
+\end {center}
-- 
cgit v0.12

