Sophie

Sophie

distrib > Mandriva > 10.0-com > i586 > by-pkgid > 9347541fe87a5ea3f3b8dbc50f660e8e > files > 91

libQGLViewer-devel-1.3.6-1mdk.i586.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 draw3DText example</title>
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  <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>

<table class="banner">
  <tr>
     <td align="center"><a href="../index.html"><b>Home</b></a></td>
     <td align="center"><a href="../refManual/hierarchy.html"><b>Documentation</b></a></td>
     <td align="center"><a href="../download.html"><b>Download</b></a></td>
     <td align="center" class="qindexHL"><a href="index.html"><b>Screenshots</b></a></td>
     <td align="center"><a href="../developer.html"><b>Developer</b></a></td>
   </tr>
</table>

<h1>The draw3DText example</h1>
<center>
  <img src="../images/draw3DText.jpg" width="300" height="200" alt="draw3DText"/>
</center>

<p>
 An icosahedron is used to illustrate the <code>draw3DText()</code> function.
</p>
<p>
 Use this function to draw text as if it was a normal object of your 3D scene. You simply have to
 define the text position and its normal.
</p>


<h2>draw3DText.h</h2>
<pre>

<span class="dir">#include &lt;QGLViewer/qglviewer.h&gt;
</span>
<span class="key">class </span>Viewer : <span class="key">public </span>QGLViewer
{
<span class="key">protected </span>:
  <span class="key">virtual </span><span class="typ">void </span>draw();
  <span class="key">virtual </span><span class="typ">void </span>init();
  <span class="key">virtual </span>QString helpString() <span class="typ">const</span>;

<span class="key">private </span>:
  qglviewer::Vec vertices[<span class="num">20</span>];
  <span class="typ">short </span>indexes[<span class="num">12</span>][<span class="num">5</span>];
  qglviewer::Vec center[<span class="num">12</span>];
  qglviewer::Vec normal[<span class="num">12</span>];
};</pre>


<h2>draw3DText.cpp</h2>
<pre>

<span class="dir">#include </span><span class="dstr">&quot;draw3DText.h&quot;</span><span class="dir">
</span><span class="dir">#include &lt;stdio.h&gt;
</span>
<span class="key">using namespace </span>qglviewer;
<span class="key">using namespace </span>std;

<span class="typ">void </span>Viewer::init()
{
  <span class="typ">const float </span>c = cos(M_PI/<span class="num">3.0</span>);
  <span class="typ">const float </span>s = sin(M_PI/<span class="num">3.0</span>);

  vertices[<span class="num">0</span>].setValue(c+<span class="num">2.0</span>*s, s, <span class="num">0.0</span>);
  vertices[<span class="num">1</span>].setValue(-c-2.<span class="num">0</span>*s, s, <span class="num">0.0</span>);
  vertices[<span class="num">2</span>].setValue(c+<span class="num">2.0</span>*s, -s, <span class="num">0.0</span>);
  vertices[<span class="num">3</span>].setValue(-c-2.<span class="num">0</span>*s, -s, <span class="num">0.0</span>);
  vertices[<span class="num">4</span>].setValue(<span class="num">0.0</span>, <span class="num">2.0</span>*s+c,  s);
  vertices[<span class="num">5</span>].setValue(<span class="num">0.0</span>, <span class="num">-2.0</span>*s-c,  s);
  vertices[<span class="num">6</span>].setValue(<span class="num">0.0</span>, <span class="num">2.0</span>*s+c, -s);
  vertices[<span class="num">7</span>].setValue(<span class="num">0.0</span>, <span class="num">-2.0</span>*s-c, -s);
  vertices[<span class="num">8</span>].setValue(-c-s,  -c-s, c+s);
  vertices[<span class="num">9</span>].setValue(-c-s,  c+s,  c+s);
  vertices[<span class="num">10</span>].setValue(-c-s, -c-s, -c-s);
  vertices[<span class="num">11</span>].setValue(-c-s, c+s,  -c-s);
  vertices[<span class="num">12</span>].setValue(c+s, -c-s, c+s);
  vertices[<span class="num">13</span>].setValue(c+s, c+s,  c+s);
  vertices[<span class="num">14</span>].setValue(c+s, -c-s, -c-s);
  vertices[<span class="num">15</span>].setValue(c+s, c+s,  -c-s);
  vertices[<span class="num">16</span>].setValue(-s, <span class="num">0.0</span>, <span class="num">-2.0</span>*s-c);
  vertices[<span class="num">17</span>].setValue(s, <span class="num">0.0</span>, <span class="num">-2.0</span>*s-c);
  vertices[<span class="num">18</span>].setValue(-s, <span class="num">0.0</span>, <span class="num">2.0</span>*s+c);
  vertices[<span class="num">19</span>].setValue(s, <span class="num">0.0</span>, <span class="num">2.0</span>*s+c);

  <span class="typ">static short </span>array[<span class="num">12</span>][<span class="num">5</span>] = {
    { <span class="num">0</span>, <span class="num">13</span>, <span class="num">19</span>, <span class="num">12</span>, <span class="num">2 </span>},
    { <span class="num">0</span>, <span class="num">2</span>, <span class="num">14</span>, <span class="num">17</span>, <span class="num">15 </span>} ,
    { <span class="num">0</span>, <span class="num">15</span>, <span class="num">6</span>, <span class="num">4</span>, <span class="num">13 </span>} ,
    { <span class="num">6</span>, <span class="num">15</span>, <span class="num">17</span>, <span class="num">16</span>, <span class="num">11 </span>} ,
    { <span class="num">4</span>, <span class="num">6</span>, <span class="num">11</span>, <span class="num">1</span>, <span class="num">9 </span>} ,
    { <span class="num">11</span>, <span class="num">16</span>, <span class="num">10</span>, <span class="num">3</span>, <span class="num">1 </span>} ,
    { <span class="num">16</span>, <span class="num">17</span>, <span class="num">14</span>, <span class="num">7</span>, <span class="num">10 </span>} ,
    { <span class="num">10</span>, <span class="num">7</span>, <span class="num">5</span>, <span class="num">8</span>, <span class="num">3 </span>} ,
    { <span class="num">5</span>, <span class="num">12</span>, <span class="num">19</span>, <span class="num">18</span>, <span class="num">8 </span>} ,
    { <span class="num">12</span>, <span class="num">5</span>, <span class="num">7</span>, <span class="num">14</span>, <span class="num">2 </span>} ,
    { <span class="num">18</span>, <span class="num">19</span>, <span class="num">13</span>, <span class="num">4</span>, <span class="num">9 </span>} ,
    { <span class="num">1</span>, <span class="num">3</span>, <span class="num">8</span>, <span class="num">18</span>, <span class="num">9 </span>} };

  <span class="key">for </span>(<span class="typ">int </span>i=<span class="num">0</span>; i&lt;<span class="num">12</span>; ++i)
    {
      normal[i].setValue(<span class="num">0.0</span>, <span class="num">0.0</span>, <span class="num">0.0</span>);
      <span class="key">for </span>(<span class="typ">int </span>j=<span class="num">0</span>; j&lt;<span class="num">5</span>; ++j)
	{
	  indexes[i][j] = array[i][j];
	  normal[i] += vertices[indexes[i][j]];
	}
      normal[i].normalize();

      <span class="com">// Center digits on faces
</span>      Quaternion rot(Vec(<span class="num">0.0</span>, <span class="num">0.0</span>, <span class="num">1.0</span>), normal[i]);
      <span class="key">if </span>(i&lt;<span class="num">9</span>)
	center[i] = <span class="num">1.92</span>*normal[i] + rot.rotate(Vec(<span class="num">-0.4</span>, <span class="num">-0.4</span>, <span class="num">0.0</span>));
      <span class="key">else
	</span>center[i] = <span class="num">1.92</span>*normal[i] + rot.rotate(Vec(<span class="num">-0.7</span>, <span class="num">-0.4</span>, <span class="num">0.0</span>));
    }

  restoreFromFile();

  glLineWidth(<span class="num">10.0</span>);
  setSceneRadius(<span class="num">3.0</span>);
  showEntireScene();

  help();
}

QString Viewer::helpString() <span class="typ">const
</span>{
  QString text(<span class="str">&quot;&lt;h2&gt;d r a w 3 D T e x t&lt;/h2&gt;&quot;</span>);
  text += <span class="str">&quot;This example illustrates the &lt;i&gt;draw3DText()&lt;/i&gt; function which &quot;</span> ;
  text += <span class="str">&quot;draws a text in 3D space, with a given normal and position.&lt;br&gt;&lt;br&gt;&quot;</span>;
  text += <span class="str">&quot;&lt;i&gt;draw3DText()&lt;/i&gt; is no longer supported since libQGLViewer version 1.3.5. &quot;</span>;
  text += <span class="str">&quot;Use GLUT to draw text using 3D lines.&quot;</span>;
  <span class="key">return </span>text;
}


<span class="typ">void </span>Viewer::draw()
{
  glEnable(GL_LIGHTING);
  <span class="typ">int </span>i,j;
  <span class="key">for </span>(i=<span class="num">0</span>; i&lt;<span class="num">12</span>; ++i)
    {
      glColor3f(.<span class="num">8</span>,.<span class="num">2</span>,.<span class="num">8</span>);
      glNormal3fv(normal[i].address());
      glBegin(GL_POLYGON);
      <span class="key">for </span>(j=<span class="num">0</span>; j&lt;<span class="num">5</span>; ++j)
	glVertex3fv(vertices[indexes[i][j]].address());
      glEnd();

      glColor3f(.<span class="num">5</span>,.<span class="num">1</span>,.<span class="num">5</span>);
      glBegin(GL_LINE_LOOP);
      <span class="key">for </span>(j=<span class="num">0</span>; j&lt;<span class="num">5</span>; ++j)
	glVertex3fv((<span class="num">1.01</span>*vertices[indexes[i][j]]).address());
      glEnd();
    }

  glDisable(GL_LIGHTING);
  glColor3f(<span class="num">0.9</span>, <span class="num">0.9</span>, <span class="num">0.9</span>);
  <span class="key">for </span>(i=<span class="num">0</span>; i&lt;<span class="num">12</span>; ++i)
    draw3DText(center[i], normal[i], QString::number(i+<span class="num">1</span>));
}</pre>


<h2>main.cpp</h2>
<pre>

<span class="dir">#include </span><span class="dstr">&quot;draw3DText.h&quot;</span><span class="dir">
</span><span class="dir">#include &lt;qapplication.h&gt;
</span>
<span class="typ">int </span>main(<span class="typ">int </span>argc, <span class="typ">char</span>** argv)
{
  <span class="com">// Read command lines arguments.
</span>  QApplication application(argc,argv);

  <span class="com">// Instantiate the viewer, show it on screen.
</span>  Viewer viewer;
  viewer.show();

  <span class="com">// Set the viewer as the application main widget.
</span>  application.setMainWidget(&amp;viewer);

  <span class="com">// Run main loop.
</span>  <span class="key">return </span>application.exec();
}</pre>



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

<p>
  <a href="http://validator.w3.org/check/referer"><img src="../images/xhtml.png" alt="Valid XHTML 1.0!" height="31" width="88" border="0"/></a>
  <a href="http://jigsaw.w3.org/css-validator/check/referer"><img src="../images/css.png" width="88" height="31" alt="Valid CSS!" border="0"/></a>
<i>Last modified on Thursday, February 5, 2004.</i>
</p>

</body>
</html>