#include "morphmesh.h" sequence::sequence() { } track::track() { } /* void track::addKey(float time,float weight) { keys.push_back(key(time,weight)); } */ float track::evaluate(float time) { //interpolate key track if (time<=keys.begin()->first) return keys.begin()->second; if (time>keys.rbegin()->first) return keys.rbegin()->second; multimap< float,float >::iterator key2=keys.upper_bound( time ); multimap< float,float >::iterator key1=key2--; float interval=key2->first-key1->first; return (((1.0-((key2->first-time)/interval))*key2->second)+((1.0-((time-key1->first)/interval))*key1->second)); } morphmesh::morphmesh() { loaded=false; /* //testing track function track testrack; testrack.keys.insert( pair(0.0,2.0) ); testrack.keys.insert( pair(1.0,4.0) ); testrack.keys.insert( pair(0.5,10.0) ); for (float f=-0.4;f<1.4;f+=0.1) { printf("%f : %f\n",f,testrack.evaluate(f)); } */ } morphmesh::morphmesh(string filename) { morphmesh(); loadMesh(filename); } int morphmesh::getNumTargets(){ return morphs.size(); } void morphmesh::draw() { draw(0); } void morphmesh::draw(int target){ map >::iterator it=morphs.begin(); for ( int i=0;ifirst); } void morphmesh::draw(string target){ clearVertices(); addVertices(morphs[target]); ofMesh::draw(); } void morphmesh::draw(const vector& targets, const vector& weights){ clearVertices(); //normalise weights int targetsNum=min(targets.size(),morphs.size()); float totalWeights=0; for (int i=0;i meshnames; for (int i=0;i verts; string vertstring=XML.getAttribute("Attribute","Data","none",0); stringstream ss(vertstring); istream_iterator begin(ss); istream_iterator end; vector vstrings(begin, end); for (int j=0;j norms; string normstring=XML.getAttribute("Attribute","Data","none",1); stringstream ns(normstring); istream_iterator nbegin(ns); istream_iterator nend; vector nstrings(nbegin, nend); for (int j=0;j texcords; string texstring=XML.getAttribute("Attribute","Data","none",2); stringstream ts(texstring); istream_iterator tbegin(ts); istream_iterator tend; vector tstrings(tbegin, tend); for (int j=0;j faces; string facestring=XML.getAttribute("Index","Data","none",0); stringstream fs(facestring); istream_iterator fbegin(fs); istream_iterator fend; vector fstrings(fbegin, fend); for (int j=0;j