1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- #include <igl/read_triangle_mesh.h>
- #include <igl/loop.h>
- #include <igl/upsample.h>
- #include <igl/false_barycentric_subdivision.h>
- #include <igl/opengl/glfw/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 OF,F;
- Eigen::MatrixXd OV,V;
- bool show_swept_volume = false;
- read_triangle_mesh(
- TUTORIAL_SHARED_PATH "/decimated-knight.off",OV,OF);
- V = OV;
- F = OF;
- cout<<R"(Usage:
- 1 Restore Original mesh
- 2 Apply In-plane upsampled mesh
- 3 Apply Loop subdivided mesh
- 4 Apply False barycentric subdivision
- )";
- igl::opengl::glfw::Viewer viewer;
- viewer.data().set_mesh(V,F);
- viewer.data().set_face_based(true);
- viewer.callback_key_down =
- [&](igl::opengl::glfw::Viewer & viewer, unsigned char key, int mod)->bool
- {
- switch(key)
- {
- default:
- return false;
- case '1':
- {
- V = OV;
- F = OF;
- break;
- }
- case '2':
- {
- igl::upsample( Eigen::MatrixXd(V), Eigen::MatrixXi(F), V,F);
- break;
- }
- case '3':
- {
- igl::loop( Eigen::MatrixXd(V), Eigen::MatrixXi(F), V,F);
- break;
- }
- case '4':
- {
- igl::false_barycentric_subdivision(
- Eigen::MatrixXd(V),Eigen::MatrixXi(F),V,F);
- break;
- }
- }
- viewer.data().clear();
- viewer.data().set_mesh(V,F);
- viewer.data().set_face_based(true);
- return true;
- };
- viewer.launch();
- }
|