Main Page   Modules   Class Hierarchy   Compound List   File List   Compound Members   File Members   Related Pages   Examples  

node/interp.cpp

Go to the documentation of this file.
00001 #include "interp.h"
00002 
00007 #include <cmath>
00008 #include <math/matrix4.h>
00009 
00011 
00012 GltInterpolator::GltInterpolator()
00013 : _active(false), 
00014   _loop(false), 
00015   _realTime(true), 
00016   _duration(0.0),
00017   _frame(0)
00018 {
00019 }
00020 
00021 GltInterpolator::~GltInterpolator()
00022 {
00023 }
00024 
00025 void 
00026 GltInterpolator::start(const double duration,const bool loop)
00027 {
00028     _duration = duration;
00029     _active   = true;
00030     _loop     = loop;
00031     _realTime = true;
00032     _timer.start();
00033 }
00034 
00035 void 
00036 GltInterpolator::start(const bool loop)
00037 {
00038     _active   = true;
00039     _loop     = loop;
00040     _realTime = false;
00041     _frame    = 0;
00042 }
00043 
00044 void
00045 GltInterpolator::stop()
00046 {
00047     _active = false;
00048     expired() = true;
00049 }
00050 
00051 void 
00052 GltInterpolator::restart(void)
00053 {
00054     _active   = true;
00055     _frame    = 0;
00056     _timer.start();
00057 }
00058 
00059 const bool   &GltInterpolator::active()   const { return _active;   }
00060 const bool   &GltInterpolator::loop()     const { return _loop;     }
00061 const bool   &GltInterpolator::realTime() const { return _realTime; }
00062 const double &GltInterpolator::duration() const { return _duration; }
00063 const int    &GltInterpolator::frame()    const { return _frame;    }
00064 
00065       bool   &GltInterpolator::active()   { return _active;   }
00066       bool   &GltInterpolator::loop()     { return _loop;     }
00067       bool   &GltInterpolator::realTime() { return _realTime; }
00068       double &GltInterpolator::duration() { return _duration; }
00069       int    &GltInterpolator::frame()    { return _frame;    }
00070 
00072 
00073 GltInterpolatorColor::GltInterpolatorColor(GltColor &color)
00074 : _color(color)
00075 {
00076 }
00077 
00078 GltInterpolatorColor::~GltInterpolatorColor()
00079 {
00080 }
00081 
00082 void 
00083 GltInterpolatorColor::draw() const
00084 {
00085     if (_active)
00086     {
00087         // REAL TIME
00088 
00089         if (_realTime)
00090         {
00091             if (_duration==0.0)
00092                 _color =  _colorMap.lookup(_colorMap.end());
00093             else
00094             {
00095                 double t = _timer.elapsed();
00096 
00097                 if (_loop)
00098                     t = fmod(t,_duration)/_duration;
00099                 else
00100                     t = CLAMP(t/_duration,0.0,1.0);
00101 
00102                 _color =  _colorMap.lookup(_colorMap.start() + _colorMap.duration()*t);
00103             }
00104 
00105             // Cast away the const to stop
00106 
00107             if (_timer.elapsed()>_duration && !_loop)
00108                 ((GltInterpolatorColor *) this)->stop();
00109         }
00110         else
00111 
00112         // PER FRAME
00113 
00114         {
00115             _color = _colorMap.lookup(double(_frame));
00116             ((GltInterpolatorColor *) this)->_frame++;
00117             if (double(_frame)>_colorMap.end())
00118             {
00119                 if (_loop)
00120                     ((GltInterpolatorColor *) this)->_frame = 0;
00121                 else
00122                     ((GltInterpolatorColor *) this)->stop();
00123             }
00124         }
00125     }
00126 }
00127 
00128       GltColorMap &GltInterpolatorColor::colorMap()       { return _colorMap; }
00129 const GltColorMap &GltInterpolatorColor::colorMap() const { return _colorMap; }
00130 
00132 
00133 GltInterpolatorRotation::GltInterpolatorRotation(Matrix &matrix)
00134 : _matrix(matrix), _axis(VectorY), _center(Vector0)
00135 {
00136 }
00137 
00138 GltInterpolatorRotation::~GltInterpolatorRotation()
00139 {
00140 }
00141 
00142 void 
00143 GltInterpolatorRotation::draw() const
00144 {
00145     if (_active && _duration!=0.0 && _axis!=Vector0)
00146     {
00147         const double t = _timer.elapsed();
00148 
00149         _matrix *=
00150             matrixTranslate(_center) *
00151             matrixRotate(_axis,t/_duration*360.0) *
00152             matrixTranslate(-_center);
00153 
00154         ((GltInterpolatorRotation *) this)->_timer.start();
00155 
00156         // Cast away the const to stop
00157 
00158         if (t>_duration && !_loop)
00159             ((GltInterpolatorRotation *) this)->stop();
00160     }
00161 }
00162 
00163       Vector &GltInterpolatorRotation::axis()         { return _axis; }
00164 const Vector &GltInterpolatorRotation::axis() const   { return _axis; }
00165 
00166       Vector &GltInterpolatorRotation::center()       { return _center; }
00167 const Vector &GltInterpolatorRotation::center() const { return _center; }

Generated on Tue Nov 5 11:11:05 2002 for GLT by doxygen1.2.18