diff options
Diffstat (limited to 'gaunt01/src/morphmesh.cpp')
| -rw-r--r-- | gaunt01/src/morphmesh.cpp | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/gaunt01/src/morphmesh.cpp b/gaunt01/src/morphmesh.cpp index 475f93b..5fc7182 100644 --- a/gaunt01/src/morphmesh.cpp +++ b/gaunt01/src/morphmesh.cpp @@ -24,10 +24,12 @@ void morphmesh::draw() { } void morphmesh::draw(int target){ clearVertices(); - addVertices(morphs[target]); + map<string,vector<ofVec3f> >::iterator it=morphs.begin(); + for ( int i=0;i<target;i++ ) it++; + addVertices(it->second); ofMesh::draw(); } -void morphmesh::draw(const vector<int>& targets, const vector<float>& weights){ +void morphmesh::draw(const vector<string>& targets, const vector<float>& weights){ clearVertices(); //normalise weights int targetsNum=min(targets.size(),morphs.size()); @@ -35,7 +37,7 @@ void morphmesh::draw(const vector<int>& targets, const vector<float>& weights){ for (int i=0;i<targetsNum;i++) totalWeights+=weights[i]; float weightFactor=1.0/totalWeights; float bx,by,bz; - for (int j=0;j<morphs[0].size();j++) { + for (int j=0;j<morphs[targets[0]].size();j++) { bx=by=bz=0; for (int i=0;i<targetsNum;i++) { bx+=morphs[targets[i]][j].x*weights[i]; @@ -56,6 +58,8 @@ bool morphmesh::loadMesh(string filename){ if(XML.pushTag("Oak3DModelDocument")) { if(XML.pushTag("MeshList")) { int numMeshes=XML.getNumTags("Mesh"); + vector<string> meshnames; + for (int i=0;i<numMeshes;i++) meshnames.push_back(XML.getAttribute("Mesh","Name","none",i)); for (int i=0;i<numMeshes;i++) { XML.pushTag("Mesh",i); if (XML.pushTag("AttributeList")) { @@ -69,7 +73,7 @@ bool morphmesh::loadMesh(string filename){ for (int j=0;j<vstrings.size();j+=3) { verts.push_back(ofVec3f(ofToFloat(vstrings[j]),ofToFloat(vstrings[j+1]),ofToFloat(vstrings[j+2]))); } - morphs.push_back(verts); + morphs[meshnames[i]]=verts; if (i==0) { addVertices(verts); |
