From 7428394962018addd5fcff66fa666196503de117 Mon Sep 17 00:00:00 2001 From: Maik Teurlings 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