Sophie

Sophie

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

libQGLViewer-devel-1.3.6-1mdk.i586.rpm

#include "fastDraw.h"

using namespace std;
using namespace qglviewer;

void Viewer::init()
{
  // Increase the material shininess, so that the difference between
  // the two versions of the spiral is more visible.
  glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 50.0);
  GLfloat specular_color[4] = { 0.8, 0.8, 0.8, 1.0 };
  glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR,  specular_color);

  restoreFromFile();
  help();
}

static void drawSpiral(bool simplified = false)
{
  int nbSteps = 600;
  int nbSub = 50;
  if (simplified)
    {
      nbSteps = 60;
      nbSub = 2;
    }
  
  for (float n=0; n<nbSub; ++n)
    {
      glBegin(GL_QUAD_STRIP);
      for (float i=0.0; i<nbSteps; ++i)
	{
	  float ratio = i/nbSteps;
	  float angle = 21.0*ratio;
	  float radius = 1.0 - 0.5*ratio;
	  
	  Vec center(radius*cos(angle), ratio-0.5, radius*sin(angle));

	  for (unsigned short j=0; j<2; ++j)
	    {
	      float delta = 3.0*(n+j)/nbSub;
	      Vec shift(cos(angle)*cos(delta), sin(delta), sin(angle)*cos(delta));
	  
	      glColor3f(1-ratio, (n+j)/nbSub , ratio);
	      glNormal3fv(shift.address());
	      glVertex3fv((center+0.2*shift).address());
	    }
	}
      glEnd();
    }
}

void Viewer::draw()
{
  drawSpiral();
}

void Viewer::fastDraw()
{
  drawSpiral(true);
}

QString Viewer::helpString() const
{
  QString text("<h2>F a s t D r a w</h2>");
  text += "The <i>fastDraw()</i> function is called instead of <i>draw()</i> when the camera is manipulated, ";
  text += "thus allowing interactive displacements even with very complex scenes, as soon as you provide a fast drawing function.";
  return text;
}