12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- #include <igl/avg_edge_length.h>
- #include <igl/per_vertex_normals.h>
- #include <igl/readOFF.h>
- #include <igl/embree/ambient_occlusion.h>
- #include <igl/viewer/Viewer.h>
- #include <iostream>
- #include "tutorial_shared_path.h"
- Eigen::MatrixXd V;
- Eigen::MatrixXi F;
- Eigen::VectorXd AO;
- bool key_down(igl::viewer::Viewer& viewer, unsigned char key, int modifier)
- {
- using namespace Eigen;
- using namespace std;
- const RowVector3d color(0.9,0.85,0.9);
- switch(key)
- {
- case '1':
-
- viewer.data.set_colors(color);
- break;
- case '2':
- {
-
- MatrixXd C = color.replicate(V.rows(),1);
- for (unsigned i=0; i<C.rows();++i)
- C.row(i) *= AO(i);
- viewer.data.set_colors(C);
- break;
- }
- case '.':
- viewer.core.lighting_factor += 0.1;
- break;
- case ',':
- viewer.core.lighting_factor -= 0.1;
- break;
- default: break;
- }
- viewer.core.lighting_factor =
- std::min(std::max(viewer.core.lighting_factor,0.f),1.f);
- return false;
- }
- int main(int argc, char *argv[])
- {
- using namespace std;
- using namespace Eigen;
- cout<<
- "Press 1 to turn off Ambient Occlusion"<<endl<<
- "Press 2 to turn on Ambient Occlusion"<<endl<<
- "Press . to turn up lighting"<<endl<<
- "Press , to turn down lighting"<<endl;
-
- igl::readOFF(TUTORIAL_SHARED_PATH "/fertility.off", V, F);
- MatrixXd N;
- igl::per_vertex_normals(V,F,N);
-
- igl::embree::ambient_occlusion(V,F,V,N,500,AO);
- AO = 1.0 - AO.array();
-
- igl::viewer::Viewer viewer;
- viewer.data.set_mesh(V, F);
- viewer.callback_key_down = &key_down;
- key_down(viewer,'2',0);
- viewer.core.show_lines = false;
- viewer.core.lighting_factor = 0.0f;
- viewer.launch();
- }
|