summaryrefslogtreecommitdiff
path: root/morpher/src/morphmesh.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'morpher/src/morphmesh.cpp')
-rw-r--r--morpher/src/morphmesh.cpp27
1 files changed, 15 insertions, 12 deletions
diff --git a/morpher/src/morphmesh.cpp b/morpher/src/morphmesh.cpp
index c617f6f..77cc8c9 100644
--- a/morpher/src/morphmesh.cpp
+++ b/morpher/src/morphmesh.cpp
@@ -1,8 +1,11 @@
#include "morphmesh.h"
morphmesh::morphmesh()
+{}
+
+morphmesh::morphmesh(string filename)
{
- //ctor
+ loadfile(filename);
}
morphmesh::~morphmesh()
@@ -11,28 +14,28 @@ morphmesh::~morphmesh()
}
int morphmesh::getNumTargets(){
- return targets.size();
+ return morphs.size();
}
void morphmesh::draw(int target){
clearVertices();
- addVertices(targets[target]);
+ addVertices(morphs[target]);
ofMesh::draw();
}
-void morphmesh::draw(const vector<float>& targetBlend){
+void morphmesh::draw(const vector<int>& targets, const vector<float>& weights){
clearVertices();
//normalise weights
- int weightsNum=min(targetBlend.size(),targets.size());
+ int targetsNum=min(targets.size(),morphs.size());
float totalWeights=0;
- for (int i=0;i<weightsNum;i++) totalWeights+=targetBlend[i];
+ for (int i=0;i<targetsNum;i++) totalWeights+=weights[i];
float weightFactor=1.0/totalWeights;
float bx,by,bz;
- for (int j=0;j<targets[0].size();j++) {
+ for (int j=0;j<morphs[0].size();j++) {
bx=by=bz=0;
- for (int i=0;i<weightsNum;i++) {
- bx+=targets[i][j].x*targetBlend[i];
- by+=targets[i][j].y*targetBlend[i];
- bz+=targets[i][j].z*targetBlend[i];
+ for (int i=0;i<targetsNum;i++) {
+ bx+=morphs[targets[i]][j].x*weights[i];
+ by+=morphs[targets[i]][j].y*weights[i];
+ bz+=morphs[targets[i]][j].z*weights[i];
}
addVertex(ofVec3f(bx*weightFactor,by*weightFactor,bz*weightFactor));
}
@@ -61,7 +64,7 @@ bool morphmesh::loadfile(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])));
}
- targets.push_back(verts);
+ morphs.push_back(verts);
if (i==0) {
addVertices(verts);