main.cpp 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. #include <igl/read_triangle_mesh.h>
  2. #include <igl/loop.h>
  3. #include <igl/upsample.h>
  4. #include <igl/false_barycentric_subdivision.h>
  5. #include <igl/opengl/glfw/Viewer.h>
  6. #include <Eigen/Core>
  7. #include <iostream>
  8. #include "tutorial_shared_path.h"
  9. int main(int argc, char * argv[])
  10. {
  11. using namespace std;
  12. using namespace igl;
  13. Eigen::MatrixXi OF,F;
  14. Eigen::MatrixXd OV,V;
  15. bool show_swept_volume = false;
  16. read_triangle_mesh(
  17. TUTORIAL_SHARED_PATH "/decimated-knight.off",OV,OF);
  18. V = OV;
  19. F = OF;
  20. cout<<R"(Usage:
  21. 1 Restore Original mesh
  22. 2 Apply In-plane upsampled mesh
  23. 3 Apply Loop subdivided mesh
  24. 4 Apply False barycentric subdivision
  25. )";
  26. igl::opengl::glfw::Viewer viewer;
  27. viewer.data().set_mesh(V,F);
  28. viewer.data().set_face_based(true);
  29. viewer.callback_key_down =
  30. [&](igl::opengl::glfw::Viewer & viewer, unsigned char key, int mod)->bool
  31. {
  32. switch(key)
  33. {
  34. default:
  35. return false;
  36. case '1':
  37. {
  38. V = OV;
  39. F = OF;
  40. break;
  41. }
  42. case '2':
  43. {
  44. igl::upsample( Eigen::MatrixXd(V), Eigen::MatrixXi(F), V,F);
  45. break;
  46. }
  47. case '3':
  48. {
  49. igl::loop( Eigen::MatrixXd(V), Eigen::MatrixXi(F), V,F);
  50. break;
  51. }
  52. case '4':
  53. {
  54. igl::false_barycentric_subdivision(
  55. Eigen::MatrixXd(V),Eigen::MatrixXi(F),V,F);
  56. break;
  57. }
  58. }
  59. viewer.data().clear();
  60. viewer.data().set_mesh(V,F);
  61. viewer.data().set_face_based(true);
  62. return true;
  63. };
  64. viewer.launch();
  65. }