aboutsummaryrefslogtreecommitdiff
path: root/src/arap.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/arap.cpp')
-rw-r--r--src/arap.cpp57
1 files changed, 57 insertions, 0 deletions
diff --git a/src/arap.cpp b/src/arap.cpp
new file mode 100644
index 0000000..06b8829
--- /dev/null
+++ b/src/arap.cpp
@@ -0,0 +1,57 @@
+#include "arap.h"
+#include "graphics/meshloader.h"
+
+#include <iostream>
+#include <set>
+#include <map>
+#include <vector>
+
+using namespace std;
+using namespace Eigen;
+
+ARAP::ARAP() {}
+
+void ARAP::init(Eigen::Vector3f &coeffMin, Eigen::Vector3f &coeffMax)
+{
+ vector<Vector3f> vertices;
+ vector<Vector3i> triangles;
+
+ // If this doesn't work for you, remember to change your working directory
+ if (MeshLoader::loadTriMesh("meshes/cactus.obj", vertices, triangles)) {
+ m_shape.init(vertices, triangles);
+ }
+
+ // Students, please don't touch this code: get min and max for viewport stuff
+ MatrixX3f all_vertices = MatrixX3f(vertices.size(), 3);
+ int i = 0;
+ for (unsigned long i = 0; i < vertices.size(); ++i) {
+ all_vertices.row(i) = vertices[i];
+ }
+ coeffMin = all_vertices.colwise().minCoeff();
+ coeffMax = all_vertices.colwise().maxCoeff();
+}
+
+// Move an anchored vertex, defined by its index, to targetPosition
+void ARAP::move(int vertex, Vector3f targetPosition)
+{
+ std::vector<Eigen::Vector3f> new_vertices = m_shape.getVertices();
+ const std::unordered_set<int>& anchors = m_shape.getAnchors();
+
+ // TODO: implement ARAP here
+ new_vertices[vertex] = targetPosition;
+
+ // Here are some helpful controls for the application
+ //
+ // - You start in first-person camera mode
+ // - WASD to move, left-click and drag to rotate
+ // - R and F to move vertically up and down
+ //
+ // - C to change to orbit camera mode
+ //
+ // - Right-click (and, optionally, drag) to anchor/unanchor points
+ // - Left-click an anchored point to move it around
+ //
+ // - Minus and equal keys (click repeatedly) to change the size of the vertices
+
+ m_shape.setVertices(new_vertices);
+}