Sophie

Sophie

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

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 drawLight 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 drawLight example</h1>

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

<p>
 The <code>drawLight()</code> function is a light debugging tool.
</p>
<p>
 drawLight() takes as an argument the GL index of the lamp : GL_LIGHT0, GL_LIGHT1... and displays a
 symbolic representation of the light. This function is usefull for debugging your light setup.
</p>
<h2>drawLight.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> Viewer <font color="#990000">:</font> <b><font color="#0000FF">public</font></b> QGLViewer
<font color="#FF0000">{</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">private</font></b><font color="#990000">:</font>
  qglviewer<font color="#990000">::</font>ManipulatedFrame<font color="#990000">*</font> light1<font color="#990000">;</font>
  qglviewer<font color="#990000">::</font>ManipulatedFrame<font color="#990000">*</font> light2<font color="#990000">;</font>
<font color="#FF0000">}</font><font color="#990000">;</font>
</tt></pre>


<h2>drawLight.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">"drawLight.h"</font>
<b><font color="#000080">#include</font></b> <font color="#FF0000">&lt;math.h&gt;</font>

<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>

<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>
  <font color="#009900">float</font> pos<font color="#990000">[</font><font color="#993399">4</font><font color="#990000">]</font> <font color="#990000">=</font> <font color="#FF0000">{</font><font color="#993399">1.0</font><font color="#990000">,</font> <font color="#993399">0.5</font><font color="#990000">,</font> <font color="#993399">1.0</font><font color="#990000">,</font> <font color="#993399">0.0</font><font color="#FF0000">}</font><font color="#990000">;</font>
  <i><font color="#9A1900">// Directionnal light</font></i>
  <b><font color="#000000">glLightfv</font></b><font color="#990000">(</font>GL_LIGHT0<font color="#990000">,</font> GL_POSITION<font color="#990000">,</font> pos<font color="#990000">);</font>

  pos<font color="#990000">[</font><font color="#993399">3</font><font color="#990000">]</font> <font color="#990000">=</font> <font color="#993399">1.0</font><font color="#990000">;</font>
  <i><font color="#9A1900">// Spot light</font></i>
  light1<font color="#990000">-&gt;</font><b><font color="#000000">getPosition</font></b><font color="#990000">(</font>pos<font color="#990000">[</font><font color="#993399">0</font><font color="#990000">],</font> pos<font color="#990000">[</font><font color="#993399">1</font><font color="#990000">],</font> pos<font color="#990000">[</font><font color="#993399">2</font><font color="#990000">]);</font>
  <b><font color="#000000">glLightfv</font></b><font color="#990000">(</font>GL_LIGHT1<font color="#990000">,</font> GL_POSITION<font color="#990000">,</font> pos<font color="#990000">);</font>
  <b><font color="#000000">glLightfv</font></b><font color="#990000">(</font>GL_LIGHT1<font color="#990000">,</font> GL_SPOT_DIRECTION<font color="#990000">,</font> light1<font color="#990000">-&gt;</font><b><font color="#000000">inverseTransformOf</font></b><font color="#990000">(</font><b><font color="#000000">Vec</font></b><font color="#990000">(</font><font color="#993399">0</font><font color="#990000">,</font><font color="#993399">0</font><font color="#990000">,</font><font color="#993399">1</font><font color="#990000">)));</font>

  <i><font color="#9A1900">// Point light</font></i>
  light2<font color="#990000">-&gt;</font><b><font color="#000000">getPosition</font></b><font color="#990000">(</font>pos<font color="#990000">[</font><font color="#993399">0</font><font color="#990000">],</font> pos<font color="#990000">[</font><font color="#993399">1</font><font color="#990000">],</font> pos<font color="#990000">[</font><font color="#993399">2</font><font color="#990000">]);</font>
  <b><font color="#000000">glLightfv</font></b><font color="#990000">(</font>GL_LIGHT2<font color="#990000">,</font> GL_POSITION<font color="#990000">,</font> pos<font color="#990000">);</font>

  <i><font color="#9A1900">// Draws the spiral</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">float</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>
      <font color="#009900">float</font> ratio <font color="#990000">=</font> i<font color="#990000">/</font>nbSteps<font color="#990000">;</font>
      <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>
      <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>
      <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>
      <font color="#009900">float</font> r1 <font color="#990000">=</font> <font color="#993399">1.0</font> <font color="#990000">-</font> <font color="#993399">0.8</font><font color="#990000">*</font>ratio<font color="#990000">;</font>
      <font color="#009900">float</font> r2 <font color="#990000">=</font> <font color="#993399">0.8</font> <font color="#990000">-</font> <font color="#993399">0.8</font><font color="#990000">*</font>ratio<font color="#990000">;</font>
      <font color="#009900">float</font> alt <font color="#990000">=</font> ratio <font color="#990000">-</font> <font color="#993399">0.5</font><font color="#990000">;</font>
      <b><font color="#0000FF">const</font></b> <font color="#009900">float</font> nor <font color="#990000">=</font> <font color="#990000">.</font><font color="#993399">5</font><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</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.05</font><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>

  <b><font color="#000000">drawLight</font></b><font color="#990000">(</font>GL_LIGHT0<font color="#990000">);</font>

  <b><font color="#0000FF">if</font></b> <font color="#990000">(</font>light1<font color="#990000">-&gt;</font><b><font color="#000000">grabsMouse</font></b><font color="#990000">())</font>
    <b><font color="#000000">drawLight</font></b><font color="#990000">(</font>GL_LIGHT1<font color="#990000">,</font> <font color="#993399">1</font><font color="#990000">.</font>2f<font color="#990000">);</font>
  <b><font color="#0000FF">else</font></b>
    <b><font color="#000000">drawLight</font></b><font color="#990000">(</font>GL_LIGHT1<font color="#990000">);</font>

  <b><font color="#0000FF">if</font></b> <font color="#990000">(</font>light2<font color="#990000">-&gt;</font><b><font color="#000000">grabsMouse</font></b><font color="#990000">())</font>
    <b><font color="#000000">drawLight</font></b><font color="#990000">(</font>GL_LIGHT2<font color="#990000">,</font> <font color="#993399">1</font><font color="#990000">.</font>2f<font color="#990000">);</font>
  <b><font color="#0000FF">else</font></b>
    <b><font color="#000000">drawLight</font></b><font color="#990000">(</font>GL_LIGHT2<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>
  <b><font color="#000000">glMatrixMode</font></b><font color="#990000">(</font>GL_MODELVIEW<font color="#990000">);</font>
  <b><font color="#000000">glLoadIdentity</font></b><font color="#990000">();</font>

  <i><font color="#9A1900">// Light0 is the default ambient light</font></i>
  <b><font color="#000000">glEnable</font></b><font color="#990000">(</font>GL_LIGHT0<font color="#990000">);</font>

  <i><font color="#9A1900">// Light1 is a spot light</font></i>
  <b><font color="#000000">glEnable</font></b><font color="#990000">(</font>GL_LIGHT1<font color="#990000">);</font>
  <b><font color="#0000FF">const</font></b> GLfloat light_ambient<font color="#990000">[</font><font color="#993399">4</font><font color="#990000">]</font>  <font color="#990000">=</font> <font color="#FF0000">{</font><font color="#993399">0</font><font color="#990000">.</font>8f<font color="#990000">,</font> <font color="#993399">0</font><font color="#990000">.</font>2f<font color="#990000">,</font> <font color="#993399">0</font><font color="#990000">.</font>2f<font color="#990000">,</font> <font color="#993399">1.0</font><font color="#FF0000">}</font><font color="#990000">;</font>
  <b><font color="#0000FF">const</font></b> GLfloat light_diffuse<font color="#990000">[</font><font color="#993399">4</font><font color="#990000">]</font>  <font color="#990000">=</font> <font color="#FF0000">{</font><font color="#993399">1.0</font><font color="#990000">,</font> <font color="#993399">0</font><font color="#990000">.</font>4f<font color="#990000">,</font> <font color="#993399">0</font><font color="#990000">.</font>4f<font color="#990000">,</font> <font color="#993399">1.0</font><font color="#FF0000">}</font><font color="#990000">;</font>
  <b><font color="#0000FF">const</font></b> GLfloat light_specular<font color="#990000">[</font><font color="#993399">4</font><font color="#990000">]</font> <font color="#990000">=</font> <font color="#FF0000">{</font><font color="#993399">1.0</font><font color="#990000">,</font> <font color="#993399">0.0</font><font color="#990000">,</font> <font color="#993399">0.0</font><font color="#990000">,</font> <font color="#993399">1.0</font><font color="#FF0000">}</font><font color="#990000">;</font>

  <b><font color="#000000">glLightf</font></b><font color="#990000">(</font> GL_LIGHT1<font color="#990000">,</font> GL_SPOT_EXPONENT<font color="#990000">,</font>  <font color="#993399">3.0</font><font color="#990000">);</font>
  <b><font color="#000000">glLightf</font></b><font color="#990000">(</font> GL_LIGHT1<font color="#990000">,</font> GL_SPOT_CUTOFF<font color="#990000">,</font>    <font color="#993399">20.0</font><font color="#990000">);</font>
  <b><font color="#000000">glLightf</font></b><font color="#990000">(</font> GL_LIGHT1<font color="#990000">,</font> GL_CONSTANT_ATTENUATION<font color="#990000">,</font> <font color="#993399">0.5</font><font color="#990000">);</font>
  <b><font color="#000000">glLightf</font></b><font color="#990000">(</font> GL_LIGHT1<font color="#990000">,</font> GL_LINEAR_ATTENUATION<font color="#990000">,</font> <font color="#993399">1.0</font><font color="#990000">);</font>
  <b><font color="#000000">glLightf</font></b><font color="#990000">(</font> GL_LIGHT1<font color="#990000">,</font> GL_QUADRATIC_ATTENUATION<font color="#990000">,</font> <font color="#993399">1.5</font><font color="#990000">);</font>
  <b><font color="#000000">glLightfv</font></b><font color="#990000">(</font>GL_LIGHT1<font color="#990000">,</font> GL_AMBIENT<font color="#990000">,</font>  light_ambient<font color="#990000">);</font>
  <b><font color="#000000">glLightfv</font></b><font color="#990000">(</font>GL_LIGHT1<font color="#990000">,</font> GL_SPECULAR<font color="#990000">,</font> light_specular<font color="#990000">);</font>
  <b><font color="#000000">glLightfv</font></b><font color="#990000">(</font>GL_LIGHT1<font color="#990000">,</font> GL_DIFFUSE<font color="#990000">,</font>  light_diffuse<font color="#990000">);</font>

  <i><font color="#9A1900">// Light2 is a classical directionnal light</font></i>
  <b><font color="#000000">glEnable</font></b><font color="#990000">(</font>GL_LIGHT2<font color="#990000">);</font>
  <b><font color="#0000FF">const</font></b> GLfloat light_ambient2<font color="#990000">[</font><font color="#993399">4</font><font color="#990000">]</font>  <font color="#990000">=</font> <font color="#FF0000">{</font><font color="#993399">0</font><font color="#990000">.</font>2f<font color="#990000">,</font> <font color="#993399">0</font><font color="#990000">.</font>2f<font color="#990000">,</font> <font color="#993399">2.0</font><font color="#990000">,</font> <font color="#993399">1.0</font><font color="#FF0000">}</font><font color="#990000">;</font>
  <b><font color="#0000FF">const</font></b> GLfloat light_diffuse2<font color="#990000">[</font><font color="#993399">4</font><font color="#990000">]</font>  <font color="#990000">=</font> <font color="#FF0000">{</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> <font color="#993399">1.0</font><font color="#990000">,</font> <font color="#993399">1.0</font><font color="#FF0000">}</font><font color="#990000">;</font>
  <b><font color="#0000FF">const</font></b> GLfloat light_specular2<font color="#990000">[</font><font color="#993399">4</font><font color="#990000">]</font> <font color="#990000">=</font> <font color="#FF0000">{</font><font color="#993399">0.0</font><font color="#990000">,</font> <font color="#993399">0.0</font><font color="#990000">,</font> <font color="#993399">1.0</font><font color="#990000">,</font> <font color="#993399">1.0</font><font color="#FF0000">}</font><font color="#990000">;</font>

  <b><font color="#000000">glLightfv</font></b><font color="#990000">(</font>GL_LIGHT2<font color="#990000">,</font> GL_AMBIENT<font color="#990000">,</font>  light_ambient2<font color="#990000">);</font>
  <b><font color="#000000">glLightfv</font></b><font color="#990000">(</font>GL_LIGHT2<font color="#990000">,</font> GL_SPECULAR<font color="#990000">,</font> light_specular2<font color="#990000">);</font>
  <b><font color="#000000">glLightfv</font></b><font color="#990000">(</font>GL_LIGHT2<font color="#990000">,</font> GL_DIFFUSE<font color="#990000">,</font>  light_diffuse2<font color="#990000">);</font>

  light1 <font color="#990000">=</font> <b><font color="#0000FF">new</font></b> <b><font color="#000000">ManipulatedFrame</font></b><font color="#990000">();</font>
  light2 <font color="#990000">=</font> <b><font color="#0000FF">new</font></b> <b><font color="#000000">ManipulatedFrame</font></b><font color="#990000">();</font>
  <b><font color="#000000">setMouseTracking</font></b><font color="#990000">(</font><b><font color="#0000FF">true</font></b><font color="#990000">);</font>

  light1<font color="#990000">-&gt;</font><b><font color="#000000">setPosition</font></b><font color="#990000">(</font><font color="#993399">0.5</font><font color="#990000">,</font> <font color="#993399">0.5</font><font color="#990000">,</font> <font color="#993399">0</font><font color="#990000">);</font>
  <i><font color="#9A1900">// Align z axis with -position direction : look at scene center</font></i>
  light1<font color="#990000">-&gt;</font><b><font color="#000000">setOrientation</font></b><font color="#990000">(</font><b><font color="#000000">Quaternion</font></b><font color="#990000">(</font><b><font color="#000000">Vec</font></b><font color="#990000">(</font><font color="#993399">0</font><font color="#990000">,</font><font color="#993399">0</font><font color="#990000">,</font><font color="#993399">1</font><font color="#990000">),</font> <font color="#990000">-</font>light1<font color="#990000">-&gt;</font><b><font color="#000000">position</font></b><font color="#990000">()));</font>

  light2<font color="#990000">-&gt;</font><b><font color="#000000">setPosition</font></b><font color="#990000">(-</font><font color="#993399">0.5</font><font color="#990000">,</font> <font color="#993399">0.5</font><font color="#990000">,</font> <font color="#993399">0</font><font color="#990000">);</font>

  <b><font color="#000000">restoreStateFromFile</font></b><font color="#990000">();</font>
  <b><font color="#000000">help</font></b><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;D r a w L i g h t&lt;/h2&gt;"</font><font color="#990000">);</font>
  text <font color="#990000">+=</font> <font color="#FF0000">"The &lt;i&gt;drawLight()&lt;/i&gt; function displays a representation of the OpenGL lights "</font><font color="#990000">;</font>
  text <font color="#990000">+=</font> <font color="#FF0000">"of your scene. This is convenient for debugging your light setup.&lt;br&gt;&lt;br&gt;"</font><font color="#990000">;</font>
  text <font color="#990000">+=</font> <font color="#FF0000">"This scene features a directionnal ligth (arrow), a spot light (cone) and a point "</font><font color="#990000">;</font>
  text <font color="#990000">+=</font> <font color="#FF0000">"light source (sphere). The representation color, position and shape matches the light setup.&lt;br&gt;&lt;br&gt;"</font><font color="#990000">;</font>
  text <font color="#990000">+=</font> <font color="#FF0000">"Hover over the point light or the spot light to manipulate it using the mouse (right "</font><font color="#990000">;</font>
  text <font color="#990000">+=</font> <font color="#FF0000">"button translates and left button rotates)."</font><font color="#990000">;</font>
  <b><font color="#0000FF">return</font></b> text<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">"drawLight.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>

  Viewer viewer<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">"drawLight"</font><font color="#990000">);</font>
<b><font color="#000080">#endif</font></b>

  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>



<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>