main.cpp 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. #include <igl/gaussian_curvature.h>
  2. #include <igl/massmatrix.h>
  3. #include <igl/invert_diag.h>
  4. #include <igl/read_triangle_mesh.h>
  5. #include <igl/png/writePNG.h>
  6. #include <igl/PI.h>
  7. #include <Eigen/Geometry>
  8. // embree
  9. #include <igl/embree/EmbreeRenderer.h>
  10. #include "tutorial_shared_path.h"
  11. #include <iostream>
  12. int main(int argc, char *argv[])
  13. {
  14. int width=640;
  15. int height=480;
  16. Eigen::MatrixXd V;
  17. Eigen::MatrixXi F;
  18. const char *mesh_file=argc > 1 ? argv[1] : TUTORIAL_SHARED_PATH "/fertility.off";
  19. const char *png_file=argc > 2 ? argv[2]: "fertility_curvature.png";
  20. // Load mesh
  21. igl::read_triangle_mesh(mesh_file, V,F);
  22. Eigen::VectorXd K;
  23. // Compute integral of Gaussian curvature
  24. igl::gaussian_curvature(V,F,K);
  25. // Compute mass matrix
  26. Eigen::SparseMatrix<double> M,Minv;
  27. igl::massmatrix(V,F,igl::MASSMATRIX_TYPE_DEFAULT,M);
  28. igl::invert_diag(M,Minv);
  29. // Divide by area to get integral average
  30. K = (Minv*K).eval();
  31. // embree object
  32. igl::embree::EmbreeRenderer er;
  33. er.set_mesh(V,F,true);
  34. //er.set_uniform_color(Eigen::RowVector3d(0.3,0.3,0.3));
  35. er.set_data(K,igl::COLOR_MAP_TYPE_JET);
  36. Eigen::Matrix3d rot_matrix;
  37. // specify rotation
  38. rot_matrix = Eigen::AngleAxisd( 10*igl::PI/180.0, Eigen::Vector3d::UnitX())
  39. * Eigen::AngleAxisd( 5*igl::PI/180.0, Eigen::Vector3d::UnitY())
  40. * Eigen::AngleAxisd( 4*igl::PI/180.0, Eigen::Vector3d::UnitZ());
  41. er.set_rot(rot_matrix);
  42. er.set_zoom(1.5);
  43. er.set_orthographic(false);
  44. Eigen::Matrix<unsigned char,Eigen::Dynamic,Eigen::Dynamic> R(width, height);
  45. Eigen::Matrix<unsigned char,Eigen::Dynamic,Eigen::Dynamic> G(width, height);
  46. Eigen::Matrix<unsigned char,Eigen::Dynamic,Eigen::Dynamic> B(width, height);
  47. Eigen::Matrix<unsigned char,Eigen::Dynamic,Eigen::Dynamic> A(width, height);
  48. // render view using embree
  49. er.render_buffer(R,G,B,A);
  50. std::cout<<"Rendered scene saved to "<<png_file<<std::endl;
  51. // save to PNG file
  52. igl::png::writePNG(R,G,B,A,png_file);
  53. return 0;
  54. }