diff options
| author | Tim Redfern <tim@eclectronics.org> | 2012-04-10 16:57:56 +0100 |
|---|---|---|
| committer | Tim Redfern <tim@eclectronics.org> | 2012-04-10 16:57:56 +0100 |
| commit | 1e10e507d20f7f38e65672ae1a5499b84b805e62 (patch) | |
| tree | 4a1ef11b8b9dd2feb6dbd9072cdd22140f3ace01 /morpher/src/morphmesh.cpp | |
| parent | 1d7efc8eba12b05ad96af2c6e68ba037b2138140 (diff) | |
sequence blending working
Diffstat (limited to 'morpher/src/morphmesh.cpp')
| -rw-r--r-- | morpher/src/morphmesh.cpp | 79 |
1 files changed, 62 insertions, 17 deletions
diff --git a/morpher/src/morphmesh.cpp b/morpher/src/morphmesh.cpp index 63d58f7..9ab414a 100644 --- a/morpher/src/morphmesh.cpp +++ b/morpher/src/morphmesh.cpp @@ -26,33 +26,73 @@ sequence::sequence(string _name,float _length,float _fadeinTime,float _fadeoutTi { name=_name; length=_length; - startTime=0.0; - stopTime=0.0; + startTime=0; + stopTime=0; fadeinTime=_fadeinTime; fadeoutTime=_fadeoutTime; active=false; } +//----------------------------------------------------- +// stopTime & startTime are absolute +// +// all other time markers are relative to the sequence +// +// +void sequence::reset(){ + active=false; + fadeinTime=-1; + fadeoutTime=-1; + startTime=0; + stopTime=0; +} void sequence::start(){ + reset(); active=true; startTime=ofGetElapsedTimef(); } -void sequence::stop(){ +void sequence::startAt(float time){ + reset(); + active=true; + startTime=ofGetElapsedTimef()+time; +} +void sequence::stopAt(float time){ + reset(); + active=true; + stopTime=ofGetElapsedTimef()+time; +} +void sequence::fadeout(float time){ + if(active==true) { + reset(); + active=true; + startTime=ofGetElapsedTimef(); + fadeoutTime=0; + stopTime=ofGetElapsedTimef()+time; + } +} +void sequence::fadein(float time){ + reset(); active=true; + fadeinTime=time; + startTime=ofGetElapsedTimef(); +} +void sequence::stop(){ + reset(); } vector<morphWeight> sequence::evaluate(float time){ - float seqtime=time-startTime; - float fadeWeight=(seqtime<fadeinTime?seqtime/fadeinTime:seqtime>stopTime-fadeoutTime&&stopTime>0&&fadeoutTime>0?(seqtime-fadeoutTime)/(stopTime-fadeoutTime):1.0); - vector<morphWeight> weights; - map<string,track>::iterator i; - for( i = tracks.begin(); i != tracks.end(); i++ ) { - weights.push_back(morphWeight(i->first,(i->second.evaluate(seqtime))*fadeWeight)); - } - return weights; + float now=ofGetElapsedTimef(); + float seqtime=time-startTime; + float looptime=fmod(seqtime,length); + float fadeWeight=(seqtime<fadeinTime?seqtime/fadeinTime:seqtime>fadeoutTime&&fadeoutTime>-1?1.0-(seqtime/(stopTime-startTime)):1.0); + vector<morphWeight> weights; + map<string,track>::iterator i; + for( i = tracks.begin(); i != tracks.end(); i++ ) { + weights.push_back(morphWeight(i->first,(i->second.evaluate(looptime))*fadeWeight)); + } + return weights; } - morphmesh::morphmesh() { loaded=false; @@ -96,8 +136,6 @@ void morphmesh::draw(string target){ ofMesh::draw(); } void morphmesh::draw(const vector<morphWeight>& weights){ - morphWeight mw[2]; - for (int i=0;i<weights.size();i++) mw[i]=weights[i]; clearVertices(); //normalise weights float totalWeights=0; @@ -122,10 +160,8 @@ void morphmesh::drawAnimated(){ map<string,sequence>::iterator i; for( i = sequences.begin(); i != sequences.end(); i++ ) { if (i->second.active) { - vector<morphWeight> newWeights=i->second.evaluate(fmod(time-i->second.startTime,i->second.length)); - int nnw= newWeights.size(); //test + vector<morphWeight> newWeights=i->second.evaluate(time); weights.insert(weights.end(),newWeights.begin(),newWeights.end()); - int nw= weights.size(); //test if (i->second.stopTime>0&&time>i->second.stopTime) i->second.active=false; } } @@ -179,6 +215,15 @@ bool morphmesh::loadSeqs(string filename){ XML.popTag(); } sequences[seqnames[i]]=seq; + + printf("testing sequence: %s\n",seqnames[i].c_str()); + for (int k=0;k<targnames.size();k++) { + printf("track: %s\n",targnames[k].c_str()); + for (float l=-.2;l<=2.2;l+=0.1) { + printf("%f : %f\n",l,sequences[seqnames[i]].tracks[targnames[k]].evaluate(l)); + } + } + loaded=true; XML.popTag(); } |
