Sophie

Sophie

distrib > Fedora > 13 > i386 > by-pkgid > cd34bbe24503efb80ebebb7e33511ba0 > files > 34

libQGLViewer-doc-2.3.1-10.fc12.noarch.rpm

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
  <title>libQGLViewer standardCamera example</title>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <link href="../qglviewer.css" rel="stylesheet" type="text/css" />
  <link rel="shortcut icon" href="../images/qglviewer.ico" type="image/x-icon" />
  <link rel="icon" href="../images/qglviewer.icon.png" type="image/png" />
</head>
<body>

<div class="banner">
 <a class="qindex" href="../index.html">Home</a>
 <a class="qindex" href="../refManual/hierarchy.html">Documentation</a>
 <a class="qindex" href="../download.html">Download</a>
 <a class="qindex highlight" href="index.html">Examples</a>
 <a class="qindex" href="../developer.html">Developer</a>
</div>

<h1>The standardCamera example</h1>

<center>
  <img src="../images/standardCamera.jpg" width="330" height="228" alt="standardCamera"/>
</center>

<p>
 A 'standard' Camera with fixed near and far planes.
</p>
<p>
 A new <code>StandardCamera</code> class is derived from <code>Camera</code>.
 Its near and far planes distances are set to fixed values (instead of being fit to
 scene dimensions as is done in the <code>QGLViewer::Camera</code>).
</p>
<p>
 The orthographic frustum dimensions are fixed instead of depending on the distance
 to the <code>revolveAroundPoint()</code>. Since this may be needed for some applications,
 you may want to use this <code>standardCamera</code> class in your code.
</p>
<h2>standardCamera.h</h2>
<!-- Generator: GNU source-highlight 2.4
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
<pre><tt><b><font color="#000080">#include</font></b> <font color="#FF0000">&lt;QGLViewer/camera.h&gt;</font>

<b><font color="#0000FF">class</font></b> StandardCamera <font color="#990000">:</font> <b><font color="#0000FF">public</font></b> qglviewer<font color="#990000">::</font>Camera
<font color="#FF0000">{</font>
<b><font color="#0000FF">public</font></b> <font color="#990000">:</font>
  <b><font color="#000000">StandardCamera</font></b><font color="#990000">();</font>

  <b><font color="#0000FF">virtual</font></b> <font color="#009900">float</font> <b><font color="#000000">zNear</font></b><font color="#990000">()</font> <b><font color="#0000FF">const</font></b><font color="#990000">;</font>
  <b><font color="#0000FF">virtual</font></b> <font color="#009900">float</font> <b><font color="#000000">zFar</font></b><font color="#990000">()</font> <b><font color="#0000FF">const</font></b><font color="#990000">;</font>

  <font color="#009900">void</font> <b><font color="#000000">toggleMode</font></b><font color="#990000">()</font> <font color="#FF0000">{</font> standard <font color="#990000">=</font> <font color="#990000">!</font>standard<font color="#990000">;</font> <font color="#FF0000">}</font>
  <font color="#009900">bool</font> <b><font color="#000000">isStandard</font></b><font color="#990000">()</font> <font color="#FF0000">{</font> <b><font color="#0000FF">return</font></b> standard<font color="#990000">;</font> <font color="#FF0000">}</font>

  <font color="#009900">void</font> <b><font color="#000000">changeOrthoFrustumSize</font></b><font color="#990000">(</font><font color="#009900">int</font> delta<font color="#990000">);</font>
  <b><font color="#0000FF">virtual</font></b> <font color="#009900">void</font> <b><font color="#000000">getOrthoWidthHeight</font></b><font color="#990000">(</font>GLdouble <font color="#990000">&amp;</font>halfWidth<font color="#990000">,</font> GLdouble <font color="#990000">&amp;</font>halfHeight<font color="#990000">)</font> <b><font color="#0000FF">const</font></b><font color="#990000">;</font>

<b><font color="#0000FF">private</font></b> <font color="#990000">:</font>
  <font color="#009900">bool</font> standard<font color="#990000">;</font>
  <font color="#009900">float</font> orthoSize<font color="#990000">;</font>
<font color="#FF0000">}</font><font color="#990000">;</font>
</tt></pre>


<h2>standardCamera.cpp</h2>
<!-- Generator: GNU source-highlight 2.4
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
<pre><tt><b><font color="#000080">#include</font></b> <font color="#FF0000">"standardCamera.h"</font>

<b><font color="#000080">#if</font></b> QT_VERSION <font color="#990000">&gt;=</font> <font color="#993399">0x040000</font>
<b><font color="#000080"># include</font></b> <font color="#FF0000">&lt;QWheelEvent&gt;</font>
<b><font color="#000080">#endif</font></b>

<b><font color="#0000FF">using</font></b> <b><font color="#0000FF">namespace</font></b> qglviewer<font color="#990000">;</font>

StandardCamera<font color="#990000">::</font><b><font color="#000000">StandardCamera</font></b><font color="#990000">()</font>
<font color="#FF0000">{</font>
  standard <font color="#990000">=</font> <b><font color="#0000FF">true</font></b><font color="#990000">;</font>
  orthoSize <font color="#990000">=</font> <font color="#993399">1.0</font><font color="#990000">;</font>
<font color="#FF0000">}</font>

<font color="#009900">float</font> StandardCamera<font color="#990000">::</font><b><font color="#000000">zNear</font></b><font color="#990000">()</font> <b><font color="#0000FF">const</font></b>
<font color="#FF0000">{</font> 
  <b><font color="#0000FF">if</font></b> <font color="#990000">(</font>standard<font color="#990000">)</font> 
    <b><font color="#0000FF">return</font></b> <font color="#993399">0</font><font color="#990000">.</font>001f<font color="#990000">;</font> 
  <b><font color="#0000FF">else</font></b> 
    <b><font color="#0000FF">return</font></b> Camera<font color="#990000">::</font><b><font color="#000000">zNear</font></b><font color="#990000">();</font> 
<font color="#FF0000">}</font>

<font color="#009900">float</font> StandardCamera<font color="#990000">::</font><b><font color="#000000">zFar</font></b><font color="#990000">()</font> <b><font color="#0000FF">const</font></b>
<font color="#FF0000">{</font>  
  <b><font color="#0000FF">if</font></b> <font color="#990000">(</font>standard<font color="#990000">)</font> 
    <b><font color="#0000FF">return</font></b> <font color="#993399">1000.0</font><font color="#990000">;</font> 
  <b><font color="#0000FF">else</font></b> 
    <b><font color="#0000FF">return</font></b> Camera<font color="#990000">::</font><b><font color="#000000">zFar</font></b><font color="#990000">();</font>
<font color="#FF0000">}</font>

<font color="#009900">void</font> StandardCamera<font color="#990000">::</font><b><font color="#000000">changeOrthoFrustumSize</font></b><font color="#990000">(</font><font color="#009900">int</font> delta<font color="#990000">)</font>
<font color="#FF0000">{</font>
  <b><font color="#0000FF">if</font></b> <font color="#990000">(</font>delta <font color="#990000">&gt;</font> <font color="#993399">0</font><font color="#990000">)</font>
    orthoSize <font color="#990000">*=</font> <font color="#993399">1</font><font color="#990000">.</font>1f<font color="#990000">;</font>
  <b><font color="#0000FF">else</font></b>
    orthoSize <font color="#990000">/=</font> <font color="#993399">1</font><font color="#990000">.</font>1f<font color="#990000">;</font>
<font color="#FF0000">}</font>

<font color="#009900">void</font> StandardCamera<font color="#990000">::</font><b><font color="#000000">getOrthoWidthHeight</font></b><font color="#990000">(</font>GLdouble <font color="#990000">&amp;</font>halfWidth<font color="#990000">,</font> GLdouble <font color="#990000">&amp;</font>halfHeight<font color="#990000">)</font> <b><font color="#0000FF">const</font></b>
<font color="#FF0000">{</font>
  <b><font color="#0000FF">if</font></b> <font color="#990000">(</font>standard<font color="#990000">)</font>
  <font color="#FF0000">{</font>
    halfHeight <font color="#990000">=</font> orthoSize<font color="#990000">;</font>
    halfWidth <font color="#990000">=</font> <b><font color="#000000">aspectRatio</font></b><font color="#990000">()</font> <font color="#990000">*</font> orthoSize<font color="#990000">;</font>
  <font color="#FF0000">}</font>
  <b><font color="#0000FF">else</font></b>
    Camera<font color="#990000">::</font><b><font color="#000000">getOrthoWidthHeight</font></b><font color="#990000">(</font>halfWidth<font color="#990000">,</font> halfHeight<font color="#990000">);</font>
<font color="#FF0000">}</font>
</tt></pre>


<h2>cameraViewer.h</h2>
<!-- Generator: GNU source-highlight 2.4
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
<pre><tt><b><font color="#000080">#include</font></b> <font color="#FF0000">&lt;QGLViewer/qglviewer.h&gt;</font>

<b><font color="#0000FF">class</font></b> CameraViewer <font color="#990000">:</font> <b><font color="#0000FF">public</font></b> QGLViewer
<font color="#FF0000">{</font>
<b><font color="#0000FF">public</font></b> <font color="#990000">:</font>
  <b><font color="#000000">CameraViewer</font></b><font color="#990000">(</font>qglviewer<font color="#990000">::</font>Camera<font color="#990000">*</font> camera<font color="#990000">);</font>

<b><font color="#0000FF">protected</font></b> <font color="#990000">:</font>
  <b><font color="#0000FF">virtual</font></b> <font color="#009900">void</font> <b><font color="#000000">draw</font></b><font color="#990000">();</font>
  <b><font color="#0000FF">virtual</font></b> <font color="#009900">void</font> <b><font color="#000000">init</font></b><font color="#990000">();</font>

<b><font color="#0000FF">private</font></b> <font color="#990000">:</font>
  qglviewer<font color="#990000">::</font>Camera<font color="#990000">*</font> c<font color="#990000">;</font>
<font color="#FF0000">}</font><font color="#990000">;</font>
</tt></pre>


<h2>viewer.h</h2>
<!-- Generator: GNU source-highlight 2.4
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
<pre><tt><b><font color="#000080">#include</font></b> <font color="#FF0000">&lt;QGLViewer/qglviewer.h&gt;</font>

<b><font color="#0000FF">class</font></b> StandardCamera<font color="#990000">;</font>

<b><font color="#0000FF">class</font></b> Viewer <font color="#990000">:</font> <b><font color="#0000FF">public</font></b> QGLViewer
<font color="#FF0000">{</font>
Q_OBJECT

<b><font color="#0000FF">public</font></b> <font color="#990000">:</font>
  <b><font color="#000000">Viewer</font></b><font color="#990000">(</font>StandardCamera<font color="#990000">*</font> camera<font color="#990000">);</font>

<b><font color="#0000FF">public</font></b> <font color="#990000">:</font>
 signals <font color="#990000">:</font>
  <font color="#009900">void</font> <b><font color="#000000">cameraChanged</font></b><font color="#990000">();</font>

<b><font color="#0000FF">protected</font></b> <font color="#990000">:</font>
  <b><font color="#0000FF">virtual</font></b> <font color="#009900">void</font> <b><font color="#000000">draw</font></b><font color="#990000">();</font>
  <b><font color="#0000FF">virtual</font></b> <font color="#009900">void</font> <b><font color="#000000">init</font></b><font color="#990000">();</font>
  <b><font color="#0000FF">virtual</font></b> QString <b><font color="#000000">helpString</font></b><font color="#990000">()</font> <b><font color="#0000FF">const</font></b><font color="#990000">;</font>
  <b><font color="#0000FF">virtual</font></b> <font color="#009900">void</font> <b><font color="#000000">keyPressEvent</font></b><font color="#990000">(</font>QKeyEvent <font color="#990000">*</font>e<font color="#990000">);</font>
  <b><font color="#0000FF">virtual</font></b> <font color="#009900">void</font> 	<b><font color="#000000">wheelEvent </font></b><font color="#990000">(</font>QWheelEvent <font color="#990000">*</font>e<font color="#990000">);</font>

<b><font color="#0000FF">private</font></b> <font color="#990000">:</font>
  <font color="#009900">void</font> <b><font color="#000000">showMessage</font></b><font color="#990000">();</font>
<font color="#FF0000">}</font><font color="#990000">;</font>
</tt></pre>


<h2>cameraViewer.cpp</h2>
<!-- Generator: GNU source-highlight 2.4
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
<pre><tt><b><font color="#000080">#include</font></b> <font color="#FF0000">"cameraViewer.h"</font>

<b><font color="#0000FF">using</font></b> <b><font color="#0000FF">namespace</font></b> qglviewer<font color="#990000">;</font>

CameraViewer<font color="#990000">::</font><b><font color="#000000">CameraViewer</font></b><font color="#990000">(</font>Camera<font color="#990000">*</font> camera<font color="#990000">)</font> <font color="#990000">:</font> <b><font color="#000000">c</font></b><font color="#990000">(</font>camera<font color="#990000">)</font> <font color="#FF0000">{}</font><font color="#990000">;</font>

<font color="#009900">void</font> CameraViewer<font color="#990000">::</font><b><font color="#000000">draw</font></b><font color="#990000">()</font>
<font color="#FF0000">{</font>
  <i><font color="#9A1900">// Exactly the same draw than for 'Viewer'. The two viewers could also share a 'Scene' instance.</font></i>
  <b><font color="#0000FF">const</font></b> <font color="#009900">float</font> nbSteps <font color="#990000">=</font> <font color="#993399">200.0</font><font color="#990000">;</font>

  <b><font color="#000000">glBegin</font></b><font color="#990000">(</font>GL_QUAD_STRIP<font color="#990000">);</font>
  <b><font color="#0000FF">for</font></b> <font color="#990000">(</font><font color="#009900">int</font> i<font color="#990000">=</font><font color="#993399">0</font><font color="#990000">;</font> i<font color="#990000">&lt;</font>nbSteps<font color="#990000">;</font> <font color="#990000">++</font>i<font color="#990000">)</font>
    <font color="#FF0000">{</font>
      <b><font color="#0000FF">const</font></b> <font color="#009900">float</font> ratio <font color="#990000">=</font> i<font color="#990000">/</font>nbSteps<font color="#990000">;</font>
      <b><font color="#0000FF">const</font></b> <font color="#009900">float</font> angle <font color="#990000">=</font> <font color="#993399">21.0</font><font color="#990000">*</font>ratio<font color="#990000">;</font>
      <b><font color="#0000FF">const</font></b> <font color="#009900">float</font> c <font color="#990000">=</font> <b><font color="#000000">cos</font></b><font color="#990000">(</font>angle<font color="#990000">);</font>
      <b><font color="#0000FF">const</font></b> <font color="#009900">float</font> s <font color="#990000">=</font> <b><font color="#000000">sin</font></b><font color="#990000">(</font>angle<font color="#990000">);</font>
      <b><font color="#0000FF">const</font></b> <font color="#009900">float</font> r1 <font color="#990000">=</font> <font color="#993399">1.0</font> <font color="#990000">-</font> <font color="#993399">0</font><font color="#990000">.</font>8f<font color="#990000">*</font>ratio<font color="#990000">;</font>
      <b><font color="#0000FF">const</font></b> <font color="#009900">float</font> r2 <font color="#990000">=</font> <font color="#993399">0</font><font color="#990000">.</font>8f <font color="#990000">-</font> <font color="#993399">0</font><font color="#990000">.</font>8f<font color="#990000">*</font>ratio<font color="#990000">;</font>
      <b><font color="#0000FF">const</font></b> <font color="#009900">float</font> alt <font color="#990000">=</font> ratio <font color="#990000">-</font> <font color="#993399">0</font><font color="#990000">.</font>5f<font color="#990000">;</font>
      <b><font color="#0000FF">const</font></b> <font color="#009900">float</font> nor <font color="#990000">=</font> <font color="#993399">0</font><font color="#990000">.</font>5f<font color="#990000">;</font>
      <b><font color="#0000FF">const</font></b> <font color="#009900">float</font> up <font color="#990000">=</font> <b><font color="#000000">sqrt</font></b><font color="#990000">(</font><font color="#993399">1.0</font><font color="#990000">-</font>nor<font color="#990000">*</font>nor<font color="#990000">);</font>
      <b><font color="#000000">glColor3f</font></b><font color="#990000">(</font><font color="#993399">1.0</font><font color="#990000">-</font>ratio<font color="#990000">,</font> <font color="#993399">0</font><font color="#990000">.</font>2f <font color="#990000">,</font> ratio<font color="#990000">);</font>
      <b><font color="#000000">glNormal3f</font></b><font color="#990000">(</font>nor<font color="#990000">*</font>c<font color="#990000">,</font> up<font color="#990000">,</font> nor<font color="#990000">*</font>s<font color="#990000">);</font>
      <b><font color="#000000">glVertex3f</font></b><font color="#990000">(</font>r1<font color="#990000">*</font>c<font color="#990000">,</font> alt<font color="#990000">,</font> r1<font color="#990000">*</font>s<font color="#990000">);</font>
      <b><font color="#000000">glVertex3f</font></b><font color="#990000">(</font>r2<font color="#990000">*</font>c<font color="#990000">,</font> alt<font color="#990000">+</font><font color="#993399">0</font><font color="#990000">.</font>05f<font color="#990000">,</font> r2<font color="#990000">*</font>s<font color="#990000">);</font>
    <font color="#FF0000">}</font>
  <b><font color="#000000">glEnd</font></b><font color="#990000">();</font>

  <i><font color="#9A1900">// Draws the other viewer's camera</font></i>
  <b><font color="#000000">glDisable</font></b><font color="#990000">(</font>GL_LIGHTING<font color="#990000">);</font>
  <b><font color="#000000">glLineWidth</font></b><font color="#990000">(</font><font color="#993399">4.0</font><font color="#990000">);</font>
  <b><font color="#000000">glColor4f</font></b><font color="#990000">(</font><font color="#993399">1.0</font><font color="#990000">,</font> <font color="#993399">1.0</font><font color="#990000">,</font> <font color="#993399">1.0</font><font color="#990000">,</font> <font color="#993399">0.5</font><font color="#990000">);</font>
  c<font color="#990000">-&gt;</font><b><font color="#000000">draw</font></b><font color="#990000">();</font>
  <b><font color="#000000">glEnable</font></b><font color="#990000">(</font>GL_LIGHTING<font color="#990000">);</font>
<font color="#FF0000">}</font>

<font color="#009900">void</font> CameraViewer<font color="#990000">::</font><b><font color="#000000">init</font></b><font color="#990000">()</font>
<font color="#FF0000">{</font>
  <i><font color="#9A1900">// Places the cameraViewer's camera far away in order to see the (other viewer) camera.</font></i>
  <b><font color="#0000FF">if</font></b> <font color="#990000">(!</font><b><font color="#000000">restoreStateFromFile</font></b><font color="#990000">())</font>
  <font color="#FF0000">{</font>
    <i><font color="#9A1900">// Make near and far planes much further from scene in order not to clip c's display.</font></i>
	<b><font color="#000000">camera</font></b><font color="#990000">()-&gt;</font><b><font color="#000000">setZClippingCoefficient</font></b><font color="#990000">(</font><font color="#993399">50.0</font><font color="#990000">);</font>
    <b><font color="#000000">camera</font></b><font color="#990000">()-&gt;</font><b><font color="#000000">setViewDirection</font></b><font color="#990000">(</font>qglviewer<font color="#990000">::</font><b><font color="#000000">Vec</font></b><font color="#990000">(</font><font color="#993399">0.0</font><font color="#990000">,</font> <font color="#990000">-</font><font color="#993399">1.0</font><font color="#990000">,</font> <font color="#993399">0.0</font><font color="#990000">));</font>
    <b><font color="#000000">showEntireScene</font></b><font color="#990000">();</font>
  <font color="#FF0000">}</font>

  <i><font color="#9A1900">// Enable semi-transparent culling planes</font></i>
  <b><font color="#000000">glEnable</font></b><font color="#990000">(</font>GL_BLEND<font color="#990000">);</font>
  <b><font color="#000000">glBlendFunc</font></b><font color="#990000">(</font>GL_SRC_ALPHA<font color="#990000">,</font> GL_ONE_MINUS_SRC_ALPHA<font color="#990000">);</font>
<font color="#FF0000">}</font>

</tt></pre>


<h2>main.cpp</h2>
<!-- Generator: GNU source-highlight 2.4
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
<pre><tt><b><font color="#000080">#include</font></b> <font color="#FF0000">"standardCamera.h"</font>
<b><font color="#000080">#include</font></b> <font color="#FF0000">"viewer.h"</font>
<b><font color="#000080">#include</font></b> <font color="#FF0000">"cameraViewer.h"</font>
<b><font color="#000080">#include</font></b> <font color="#FF0000">&lt;qapplication.h&gt;</font>

<font color="#009900">int</font> <b><font color="#000000">main</font></b><font color="#990000">(</font><font color="#009900">int</font> argc<font color="#990000">,</font> <font color="#009900">char</font><font color="#990000">**</font> argv<font color="#990000">)</font>
<font color="#FF0000">{</font>
  QApplication <b><font color="#000000">application</font></b><font color="#990000">(</font>argc<font color="#990000">,</font>argv<font color="#990000">);</font>

  <i><font color="#9A1900">// Instantiate the two viewers.</font></i>
  StandardCamera<font color="#990000">*</font> sc <font color="#990000">=</font> <b><font color="#0000FF">new</font></b> <b><font color="#000000">StandardCamera</font></b><font color="#990000">();</font>
  Viewer <b><font color="#000000">viewer</font></b><font color="#990000">(</font>sc<font color="#990000">);</font>
  CameraViewer <b><font color="#000000">cviewer</font></b><font color="#990000">(</font>sc<font color="#990000">);</font>

  <i><font color="#9A1900">// Make sure every v camera movement updates the camera viewer</font></i>
  QObject<font color="#990000">::</font><b><font color="#000000">connect</font></b><font color="#990000">(</font>viewer<font color="#990000">.</font><b><font color="#000000">camera</font></b><font color="#990000">()-&gt;</font><b><font color="#000000">frame</font></b><font color="#990000">(),</font> <b><font color="#000000">SIGNAL</font></b><font color="#990000">(</font><b><font color="#000000">manipulated</font></b><font color="#990000">()),</font> <font color="#990000">&amp;</font>cviewer<font color="#990000">,</font> <b><font color="#000000">SLOT</font></b><font color="#990000">(</font><b><font color="#000000">updateGL</font></b><font color="#990000">()));</font>
  QObject<font color="#990000">::</font><b><font color="#000000">connect</font></b><font color="#990000">(</font>viewer<font color="#990000">.</font><b><font color="#000000">camera</font></b><font color="#990000">()-&gt;</font><b><font color="#000000">frame</font></b><font color="#990000">(),</font> <b><font color="#000000">SIGNAL</font></b><font color="#990000">(</font><b><font color="#000000">spun</font></b><font color="#990000">()),</font> <font color="#990000">&amp;</font>cviewer<font color="#990000">,</font> <b><font color="#000000">SLOT</font></b><font color="#990000">(</font><b><font color="#000000">updateGL</font></b><font color="#990000">()));</font>
  <i><font color="#9A1900">// Also update on camera change (type or mode)</font></i>
  QObject<font color="#990000">::</font><b><font color="#000000">connect</font></b><font color="#990000">(&amp;</font>viewer<font color="#990000">,</font> <b><font color="#000000">SIGNAL</font></b><font color="#990000">(</font><b><font color="#000000">cameraChanged</font></b><font color="#990000">()),</font> <font color="#990000">&amp;</font>cviewer<font color="#990000">,</font> <b><font color="#000000">SLOT</font></b><font color="#990000">(</font><b><font color="#000000">updateGL</font></b><font color="#990000">()));</font>

<b><font color="#000080">#if</font></b> QT_VERSION <font color="#990000">&lt;</font> <font color="#993399">0x040000</font>
  application<font color="#990000">.</font><b><font color="#000000">setMainWidget</font></b><font color="#990000">(&amp;</font>viewer<font color="#990000">);</font>
<b><font color="#000080">#else</font></b>
  viewer<font color="#990000">.</font><b><font color="#000000">setWindowTitle</font></b><font color="#990000">(</font><font color="#FF0000">"standardCamera"</font><font color="#990000">);</font>
  cviewer<font color="#990000">.</font><b><font color="#000000">setWindowTitle</font></b><font color="#990000">(</font><font color="#FF0000">"Camera viewer"</font><font color="#990000">);</font>
<b><font color="#000080">#endif</font></b>

  cviewer<font color="#990000">.</font><b><font color="#000000">show</font></b><font color="#990000">();</font>
  viewer<font color="#990000">.</font><b><font color="#000000">show</font></b><font color="#990000">();</font>

  <b><font color="#0000FF">return</font></b> application<font color="#990000">.</font><b><font color="#000000">exec</font></b><font color="#990000">();</font>
<font color="#FF0000">}</font>
</tt></pre>


<h2>viewer.cpp</h2>
<!-- Generator: GNU source-highlight 2.4
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
<pre><tt><b><font color="#000080">#include</font></b> <font color="#FF0000">"viewer.h"</font>
<b><font color="#000080">#include</font></b> <font color="#FF0000">"standardCamera.h"</font>

<b><font color="#000080">#if</font></b> QT_VERSION <font color="#990000">&gt;=</font> <font color="#993399">0x040000</font>
<b><font color="#000080"># include</font></b> <font color="#FF0000">&lt;QKeyEvent&gt;</font>
<b><font color="#000080">#endif</font></b>

<b><font color="#0000FF">using</font></b> <b><font color="#0000FF">namespace</font></b> std<font color="#990000">;</font>
<b><font color="#0000FF">using</font></b> <b><font color="#0000FF">namespace</font></b> qglviewer<font color="#990000">;</font>

Viewer<font color="#990000">::</font><b><font color="#000000">Viewer</font></b><font color="#990000">(</font>StandardCamera<font color="#990000">*</font> nfc<font color="#990000">)</font>
<font color="#FF0000">{</font>
  <i><font color="#9A1900">// Change the camera.</font></i>
  Camera<font color="#990000">*</font> c <font color="#990000">=</font> <b><font color="#000000">camera</font></b><font color="#990000">();</font>
  <b><font color="#000000">setCamera</font></b><font color="#990000">(</font>nfc<font color="#990000">);</font>
  <b><font color="#0000FF">delete</font></b> c<font color="#990000">;</font>
<font color="#FF0000">}</font>

<i><font color="#9A1900">// Draws a spiral</font></i>
<font color="#009900">void</font> Viewer<font color="#990000">::</font><b><font color="#000000">draw</font></b><font color="#990000">()</font>
<font color="#FF0000">{</font>
  <b><font color="#0000FF">const</font></b> <font color="#009900">float</font> nbSteps <font color="#990000">=</font> <font color="#993399">200.0</font><font color="#990000">;</font>

  <b><font color="#000000">glBegin</font></b><font color="#990000">(</font>GL_QUAD_STRIP<font color="#990000">);</font>
  <b><font color="#0000FF">for</font></b> <font color="#990000">(</font><font color="#009900">int</font> i<font color="#990000">=</font><font color="#993399">0</font><font color="#990000">;</font> i<font color="#990000">&lt;</font>nbSteps<font color="#990000">;</font> <font color="#990000">++</font>i<font color="#990000">)</font>
    <font color="#FF0000">{</font>
      <b><font color="#0000FF">const</font></b> <font color="#009900">float</font> ratio <font color="#990000">=</font> i<font color="#990000">/</font>nbSteps<font color="#990000">;</font>
      <b><font color="#0000FF">const</font></b> <font color="#009900">float</font> angle <font color="#990000">=</font> <font color="#993399">21.0</font><font color="#990000">*</font>ratio<font color="#990000">;</font>
      <b><font color="#0000FF">const</font></b> <font color="#009900">float</font> c <font color="#990000">=</font> <b><font color="#000000">cos</font></b><font color="#990000">(</font>angle<font color="#990000">);</font>
      <b><font color="#0000FF">const</font></b> <font color="#009900">float</font> s <font color="#990000">=</font> <b><font color="#000000">sin</font></b><font color="#990000">(</font>angle<font color="#990000">);</font>
      <b><font color="#0000FF">const</font></b> <font color="#009900">float</font> r1 <font color="#990000">=</font> <font color="#993399">1.0</font> <font color="#990000">-</font> <font color="#993399">0</font><font color="#990000">.</font>8f<font color="#990000">*</font>ratio<font color="#990000">;</font>
      <b><font color="#0000FF">const</font></b> <font color="#009900">float</font> r2 <font color="#990000">=</font> <font color="#993399">0</font><font color="#990000">.</font>8f <font color="#990000">-</font> <font color="#993399">0</font><font color="#990000">.</font>8f<font color="#990000">*</font>ratio<font color="#990000">;</font>
      <b><font color="#0000FF">const</font></b> <font color="#009900">float</font> alt <font color="#990000">=</font> ratio <font color="#990000">-</font> <font color="#993399">0</font><font color="#990000">.</font>5f<font color="#990000">;</font>
      <b><font color="#0000FF">const</font></b> <font color="#009900">float</font> nor <font color="#990000">=</font> <font color="#993399">0</font><font color="#990000">.</font>5f<font color="#990000">;</font>
      <b><font color="#0000FF">const</font></b> <font color="#009900">float</font> up <font color="#990000">=</font> <b><font color="#000000">sqrt</font></b><font color="#990000">(</font><font color="#993399">1.0</font><font color="#990000">-</font>nor<font color="#990000">*</font>nor<font color="#990000">);</font>
      <b><font color="#000000">glColor3f</font></b><font color="#990000">(</font><font color="#993399">1.0</font><font color="#990000">-</font>ratio<font color="#990000">,</font> <font color="#993399">0</font><font color="#990000">.</font>2f <font color="#990000">,</font> ratio<font color="#990000">);</font>
      <b><font color="#000000">glNormal3f</font></b><font color="#990000">(</font>nor<font color="#990000">*</font>c<font color="#990000">,</font> up<font color="#990000">,</font> nor<font color="#990000">*</font>s<font color="#990000">);</font>
      <b><font color="#000000">glVertex3f</font></b><font color="#990000">(</font>r1<font color="#990000">*</font>c<font color="#990000">,</font> alt<font color="#990000">,</font> r1<font color="#990000">*</font>s<font color="#990000">);</font>
      <b><font color="#000000">glVertex3f</font></b><font color="#990000">(</font>r2<font color="#990000">*</font>c<font color="#990000">,</font> alt<font color="#990000">+</font><font color="#993399">0</font><font color="#990000">.</font>05f<font color="#990000">,</font> r2<font color="#990000">*</font>s<font color="#990000">);</font>
    <font color="#FF0000">}</font>
  <b><font color="#000000">glEnd</font></b><font color="#990000">();</font>
<font color="#FF0000">}</font>

<font color="#009900">void</font> Viewer<font color="#990000">::</font><b><font color="#000000">init</font></b><font color="#990000">()</font>
<font color="#FF0000">{</font>
  <i><font color="#9A1900">// Restore previous viewer state.</font></i>
  <b><font color="#0000FF">if</font></b> <font color="#990000">(!</font><b><font color="#000000">restoreStateFromFile</font></b><font color="#990000">())</font>
  <b><font color="#000000">showEntireScene</font></b><font color="#990000">();</font>

  <b><font color="#000000">setKeyDescription</font></b><font color="#990000">(</font>Qt<font color="#990000">::</font>Key_T<font color="#990000">,</font> <font color="#FF0000">"Toggles camera type (perspective or orthographic)"</font><font color="#990000">);</font>
  <b><font color="#000000">setKeyDescription</font></b><font color="#990000">(</font>Qt<font color="#990000">::</font>Key_M<font color="#990000">,</font> <font color="#FF0000">"Toggles camera mode (standard or QGLViewer)"</font><font color="#990000">);</font>

  <b><font color="#000000">setMouseBindingDescription</font></b><font color="#990000">(</font>Qt<font color="#990000">::</font>SHIFT <font color="#990000">+</font> Qt<font color="#990000">::</font>MidButton<font color="#990000">,</font> <font color="#FF0000">"Change frustum size (for standard camera in orthographic mode)"</font><font color="#990000">);</font>

  <i><font color="#9A1900">// Display help window.</font></i>
  <b><font color="#000000">help</font></b><font color="#990000">();</font>
<font color="#FF0000">}</font>

<font color="#009900">void</font> Viewer<font color="#990000">::</font><b><font color="#000000">showMessage</font></b><font color="#990000">()</font>
<font color="#FF0000">{</font>
  QString std <font color="#990000">=</font> <font color="#990000">((</font>StandardCamera<font color="#990000">*)</font><b><font color="#000000">camera</font></b><font color="#990000">())-&gt;</font><b><font color="#000000">isStandard</font></b><font color="#990000">()?</font><font color="#FF0000">"Standard camera"</font><font color="#990000">:</font><font color="#FF0000">"QGLViewer camera"</font><font color="#990000">;</font>
  QString type <font color="#990000">=</font> <b><font color="#000000">camera</font></b><font color="#990000">()-&gt;</font><b><font color="#000000">type</font></b><font color="#990000">()</font> <font color="#990000">==</font> Camera<font color="#990000">::</font>PERSPECTIVE<font color="#990000">?</font><font color="#FF0000">"Perspective"</font><font color="#990000">:</font><font color="#FF0000">"Orthographic"</font><font color="#990000">;</font>
  <b><font color="#000000">displayMessage</font></b><font color="#990000">(</font>std <font color="#990000">+</font> <font color="#FF0000">" - "</font> <font color="#990000">+</font> type<font color="#990000">);</font>
  emit <b><font color="#000000">cameraChanged</font></b><font color="#990000">();</font>
<font color="#FF0000">}</font>

<font color="#009900">void</font> Viewer<font color="#990000">::</font><b><font color="#000000">keyPressEvent</font></b><font color="#990000">(</font>QKeyEvent <font color="#990000">*</font>e<font color="#990000">)</font>
<font color="#FF0000">{</font>
  <b><font color="#0000FF">if</font></b> <font color="#990000">(</font>e<font color="#990000">-&gt;</font><b><font color="#000000">key</font></b><font color="#990000">()</font> <font color="#990000">==</font> Qt<font color="#990000">::</font>Key_M<font color="#990000">)</font> <font color="#FF0000">{</font>
  <i><font color="#9A1900">// 'M' changes mode : standard or QGLViewer camera</font></i>
    <font color="#990000">((</font>StandardCamera<font color="#990000">*)</font><b><font color="#000000">camera</font></b><font color="#990000">())-&gt;</font><b><font color="#000000">toggleMode</font></b><font color="#990000">();</font>
    <b><font color="#000000">showMessage</font></b><font color="#990000">();</font>
  <font color="#FF0000">}</font> <b><font color="#0000FF">else</font></b>
    <b><font color="#0000FF">if</font></b> <font color="#990000">(</font>e<font color="#990000">-&gt;</font><b><font color="#000000">key</font></b><font color="#990000">()</font> <font color="#990000">==</font> Qt<font color="#990000">::</font>Key_T<font color="#990000">)</font> <font color="#FF0000">{</font>
    <i><font color="#9A1900">// 'T' changes the projection type : perspective or orthogonal</font></i>
      <b><font color="#0000FF">if</font></b> <font color="#990000">(</font><b><font color="#000000">camera</font></b><font color="#990000">()-&gt;</font><b><font color="#000000">type</font></b><font color="#990000">()</font> <font color="#990000">==</font> Camera<font color="#990000">::</font>ORTHOGRAPHIC<font color="#990000">)</font>
        <b><font color="#000000">camera</font></b><font color="#990000">()-&gt;</font><b><font color="#000000">setType</font></b><font color="#990000">(</font>Camera<font color="#990000">::</font>PERSPECTIVE<font color="#990000">);</font>
      <b><font color="#0000FF">else</font></b>
        <b><font color="#000000">camera</font></b><font color="#990000">()-&gt;</font><b><font color="#000000">setType</font></b><font color="#990000">(</font>Camera<font color="#990000">::</font>ORTHOGRAPHIC<font color="#990000">);</font>
        <b><font color="#000000">showMessage</font></b><font color="#990000">();</font>
      <font color="#FF0000">}</font> <b><font color="#0000FF">else</font></b>
        QGLViewer<font color="#990000">::</font><b><font color="#000000">keyPressEvent</font></b><font color="#990000">(</font>e<font color="#990000">);</font>
<font color="#FF0000">}</font>

<font color="#009900">void</font> Viewer<font color="#990000">::</font><b><font color="#000000">wheelEvent</font></b><font color="#990000">(</font>QWheelEvent <font color="#990000">*</font>e<font color="#990000">)</font>
<font color="#FF0000">{</font>
  <b><font color="#0000FF">if</font></b> <font color="#990000">((</font><b><font color="#000000">camera</font></b><font color="#990000">()-&gt;</font><b><font color="#000000">type</font></b><font color="#990000">()</font> <font color="#990000">==</font> Camera<font color="#990000">::</font>ORTHOGRAPHIC<font color="#990000">)</font> <font color="#990000">&amp;&amp;</font> <font color="#990000">(((</font>StandardCamera<font color="#990000">*)</font><b><font color="#000000">camera</font></b><font color="#990000">())-&gt;</font><b><font color="#000000">isStandard</font></b><font color="#990000">())</font> <font color="#990000">&amp;&amp;</font>
<b><font color="#000080">#if</font></b> QT_VERSION <font color="#990000">&gt;=</font> <font color="#993399">0x040000</font>
    <font color="#990000">(</font>e<font color="#990000">-&gt;</font><b><font color="#000000">modifiers</font></b><font color="#990000">()</font> <font color="#990000">&amp;</font> Qt<font color="#990000">::</font>ShiftModifier<font color="#990000">))</font>
<b><font color="#000080">#else</font></b>
    <font color="#990000">(</font>e<font color="#990000">-&gt;</font><b><font color="#000000">state</font></b><font color="#990000">()</font> <font color="#990000">&amp;</font> Qt<font color="#990000">::</font>ShiftButton<font color="#990000">))</font>
<b><font color="#000080">#endif</font></b>
  <font color="#FF0000">{</font>
    <font color="#990000">((</font>StandardCamera<font color="#990000">*)</font><b><font color="#000000">camera</font></b><font color="#990000">())-&gt;</font><b><font color="#000000">changeOrthoFrustumSize</font></b><font color="#990000">(</font>e<font color="#990000">-&gt;</font><b><font color="#000000">delta</font></b><font color="#990000">());</font>
    emit <b><font color="#000000">cameraChanged</font></b><font color="#990000">();</font>
    <b><font color="#000000">updateGL</font></b><font color="#990000">();</font>
  <font color="#FF0000">}</font>
  <b><font color="#0000FF">else</font></b>
    QGLViewer<font color="#990000">::</font><b><font color="#000000">wheelEvent</font></b><font color="#990000">(</font>e<font color="#990000">);</font>
<font color="#FF0000">}</font>

QString Viewer<font color="#990000">::</font><b><font color="#000000">helpString</font></b><font color="#990000">()</font> <b><font color="#0000FF">const</font></b>
<font color="#FF0000">{</font>
  QString <b><font color="#000000">text</font></b><font color="#990000">(</font><font color="#FF0000">"&lt;h2&gt;S t a n d a r d C a m e r a&lt;/h2&gt;"</font><font color="#990000">);</font>
  text <font color="#990000">+=</font> <font color="#FF0000">"An overloaded &lt;code&gt;Camera&lt;/code&gt; class is used, that reproduces the 'standard' OpenGL settings.&lt;br&gt;&lt;br&gt;"</font><font color="#990000">;</font>

  text <font color="#990000">+=</font> <font color="#FF0000">"With this camera, the near and (resp. far) plane distance is set to a very small (resp. very large) value. "</font><font color="#990000">;</font>
  text <font color="#990000">+=</font> <font color="#FF0000">"With the orthographic camera type, the frustum dimensions are fixed. Use &lt;code&gt;Shift&lt;/code&gt; and the mouse wheel to change them.&lt;br&gt;&lt;br&gt;"</font><font color="#990000">;</font>

  text <font color="#990000">+=</font> <font color="#FF0000">"On the other hand, the QGLViewer camera fits the near and far distances to the scene radius. "</font><font color="#990000">;</font>
  text <font color="#990000">+=</font> <font color="#FF0000">"Fine tuning is available using &lt;code&gt;zClippingCoefficient()&lt;/code&gt; and &lt;code&gt;zNearCoefficient()&lt;/code&gt;. "</font><font color="#990000">;</font>
  text <font color="#990000">+=</font> <font color="#FF0000">"However, visual results do not seem to be impacted by this zBuffer fitted range.&lt;br&gt;&lt;br&gt;"</font><font color="#990000">;</font>
  text <font color="#990000">+=</font> <font color="#FF0000">"The QGLViewer camera also adapts the orthographic frustum dimensions to the distance to the &lt;code&gt;revolveAroundPoint()&lt;/code&gt; to mimic a perspective camera. "</font><font color="#990000">;</font>
  text <font color="#990000">+=</font> <font color="#FF0000">"Since this behavior may not be needed, this example shows how to override it.&lt;br&gt;&lt;br&gt;"</font><font color="#990000">;</font>

  text <font color="#990000">+=</font> <font color="#FF0000">"The second viewer displays the first one's camera to show its configuration.&lt;br&gt;&lt;br&gt;"</font><font color="#990000">;</font>

  text <font color="#990000">+=</font> <font color="#FF0000">"Use &lt;b&gt;M&lt;/b&gt; to switch between 'standard' and QGLViewer camera behavior.&lt;br&gt;"</font><font color="#990000">;</font>
  text <font color="#990000">+=</font> <font color="#FF0000">"Use &lt;b&gt;T&lt;/b&gt; to switch between perspective and orthographic camera type.&lt;br&gt;&lt;br&gt;"</font><font color="#990000">;</font>

  text <font color="#990000">+=</font> <font color="#FF0000">"Use &lt;b&gt;Shift+wheel&lt;/b&gt; to change standard camera orthographic size."</font><font color="#990000">;</font>

  <b><font color="#0000FF">return</font></b> text<font color="#990000">;</font>
<font color="#FF0000">}</font>
</tt></pre>



<p>
  Back to the <a href="index.html">examples main page</a>.
</p>

<p>
  <a href="http://validator.w3.org/check/referer"><img src="../images/xhtml.png" alt="Valid XHTML 1.0!" height="31" width="88"/></a>
  <a href="http://jigsaw.w3.org/css-validator/check/referer"><img src="../images/css.png" width="88" height="31" alt="Valid CSS!"/></a>
<i>Last modified on Tuesday, September 30, 2008.</i>
</p>

</body>
</html>