浏览代码

swept volume tutorial, remove unused teddy bears

Former-commit-id: c60e32be030cde1c3300c4ee20e567782455b4bd
Alec Jacobson 9 年之前
父节点
当前提交
2d621c692f

+ 8 - 0
tutorial/707_SweptVolume/CMakeLists.txt

@@ -0,0 +1,8 @@
+cmake_minimum_required(VERSION 2.8.12)
+project(707_SweptVolume)
+
+add_executable(${PROJECT_NAME}_bin
+  main.cpp)
+target_include_directories(${PROJECT_NAME}_bin PRIVATE ${LIBIGL_INCLUDE_DIRS})
+target_compile_definitions(${PROJECT_NAME}_bin PRIVATE ${LIBIGL_DEFINITIONS})
+target_link_libraries(${PROJECT_NAME}_bin ${LIBIGL_LIBRARIES} ${LIBIGL_VIEWER_EXTRA_LIBRARIES})

+ 87 - 0
tutorial/707_SweptVolume/main.cpp

@@ -0,0 +1,87 @@
+#include <igl/read_triangle_mesh.h>
+#include <igl/copyleft/marching_cubes.h>
+#include <igl/copyleft/swept_volume.h>
+#include <igl/get_seconds.h>
+#include <igl/material_colors.h>
+#include <igl/viewer/Viewer.h>
+#include <Eigen/Core>
+#include <iostream>
+
+#include "tutorial_shared_path.h"
+
+int main(int argc, char * argv[])
+{
+  using namespace std;
+  using namespace igl;
+  Eigen::MatrixXi F,SF;
+  Eigen::MatrixXd V,SV,VT;
+  bool show_swept_volume = false;
+  // Define a rigid motion
+  const auto & transform = [](const double t)->Eigen::Affine3d
+  {
+    Eigen::Affine3d T = Eigen::Affine3d::Identity();
+    T.rotate(Eigen::AngleAxisd(t*2.*M_PI,Eigen::Vector3d(0,1,0)));
+    T.translate(Eigen::Vector3d(0,0.125*cos(2.*M_PI*t),0));
+    return T;
+  };
+  // Read in inputs as double precision floating point meshes
+  read_triangle_mesh(
+      TUTORIAL_SHARED_PATH "/bunny.off",V,F);
+  cout<<R"(Usage:
+[space]  Toggle between transforming original mesh and swept volume
+)";
+  igl::viewer::Viewer viewer;
+  viewer.data.set_mesh(V,F);
+  viewer.data.set_face_based(true);
+  viewer.core.is_animating = !show_swept_volume;
+  const int grid_size = 50;
+  const int time_steps = 200;
+  const double isolevel = 0.1;
+  std::cerr<<"Computing swept volume...";
+  igl::copyleft::swept_volume(
+    V,F,transform,time_steps,grid_size,isolevel,SV,SF);
+  std::cerr<<" finished."<<std::endl;
+
+  viewer.callback_pre_draw =
+    [&](igl::viewer::Viewer & viewer)->bool
+    {
+      if(!show_swept_volume)
+      {
+        Eigen::Affine3d T = transform(0.25*igl::get_seconds());
+        VT = V*T.matrix().block(0,0,3,3).transpose();
+        Eigen::RowVector3d trans = T.matrix().block(0,3,3,1).transpose();
+        VT = ( VT.rowwise() + trans).eval();
+        viewer.data.set_vertices(VT);
+        viewer.data.compute_normals();
+      }
+      return false;
+    };
+  viewer.callback_key_down =
+    [&](igl::viewer::Viewer & viewer, unsigned char key, int mod)->bool
+    {
+      switch(key)
+      {
+        default:
+          return false;
+        case ' ':
+          show_swept_volume = !show_swept_volume;
+          viewer.data.clear();
+          if(show_swept_volume)
+          {
+            viewer.data.set_mesh(SV,SF);
+            viewer.data.uniform_colors(
+              {SILVER_AMBIENT[0], SILVER_AMBIENT[1], SILVER_AMBIENT[2]},
+              {SILVER_DIFFUSE[0], SILVER_DIFFUSE[1], SILVER_DIFFUSE[2]},
+              {SILVER_SPECULAR[0], SILVER_SPECULAR[1], SILVER_SPECULAR[2]});
+          }else
+          {
+            viewer.data.set_mesh(V,F);
+          }
+          viewer.core.is_animating = !show_swept_volume;
+          viewer.data.set_face_based(true);
+          break;
+      }
+      return true;
+    };
+  viewer.launch();
+}

+ 0 - 1
tutorial/shared/teddy.dmat.REMOVED.git-id

@@ -1 +0,0 @@
-c42768e14257faba72a87158aa86b431d6175e49

+ 0 - 1
tutorial/shared/teddy.obj.REMOVED.git-id

@@ -1 +0,0 @@
-b63045820879722acf2bfcd12be6d418a20ac941

+ 0 - 1
tutorial/shared/teddy_angle_bound_remeshed.obj.REMOVED.git-id

@@ -1 +0,0 @@
-649985e93d6dbf733ce308e5a1862acc350f6c38

+ 0 - 1
tutorial/shared/teddy_smooth_remeshed.obj.REMOVED.git-id

@@ -1 +0,0 @@
-3165f0bf04505f470120ceab3da5912fddfe4ff6