/* echo $LD_LIBRARY_PATH LD_LIBRARY_PATH=/mnt/e/UniversitàMagistrale/secondoSemestre/3DgeometricModelingProcessing/clean/vcglib/wrap/embree/embree-3.13.4.x86_64.linux/lib export LD_LIBRARY_PATH g++ ./apps/embree/embree_sample.cpp -o ./apps/embree/prova.o -lembree3 -I ./vcg -I ./ -I ./eigenlib -I ./wrap/embree/embree-3.13.4.x86_64.linux/include -L ./wrap/embree/embree-3.13.4.x86_64.linux/lib -std=c++11 -fopenmp -O3 ./apps/embree/prova.o ./apps/meshes/torus.off 64 */ #include #include //import export #include #include #include #include #include #include #include //vcgLibForEmbree #include class MyVertex; class MyEdge; class MyFace; struct MyUsedTypes : public vcg::UsedTypes ::AsVertexType, vcg::Use ::AsEdgeType, vcg::Use ::AsFaceType> {}; class MyVertex : public vcg::Vertex< MyUsedTypes, vcg::vertex::Coord3f, vcg::vertex::Normal3f, vcg::vertex::BitFlags, vcg::vertex::VFAdj, vcg::vertex::Qualityf, vcg::vertex::Color4b> {}; class MyFace : public vcg::Face< MyUsedTypes, vcg::face::FFAdj, vcg::face::VFAdj, vcg::face::Normal3f, vcg::face::VertexRef, vcg::face::BitFlags, vcg::face::Color4b, vcg::face::Qualityf> {}; class MyEdge : public vcg::Edge< MyUsedTypes> {}; class MyMesh : public vcg::tri::TriMesh< std::vector, std::vector, std::vector > {}; using namespace vcg; using namespace std; int main( int argc, char **argv ) { cout << "start" << endl; MyMesh m; int ret = tri::io::ImporterOFF::Open(m, argv[1]); if(ret!=tri::io::ImporterOFF::NoError) { cout<<"Error reading file \n"< 2) { nOfRays = std::stoi(argv[2]); } MyMesh m2,m3,m4,m5,m6,m7; vcg::tri::Append::MeshCopy(m2,m); vcg::tri::Append::MeshCopy(m3,m); vcg::tri::Append::MeshCopy(m4, m); vcg::tri::Append::MeshCopy(m5, m); vcg::tri::Append::MeshCopy(m6,m); vcg::tri::Append::MeshCopy(m7,m); EmbreeAdaptor adaptor = EmbreeAdaptor(m); adaptor.computeAmbientOcclusion(m,nOfRays); tri::UpdateQuality::VertexFromFace(m); tri::UpdateColor::PerVertexQualityGray(m); tri::UpdateNormal::NormalizePerVertex(m); tri::io::ExporterOFF::Save(m,"testAO.off",tri::io::Mask::IOM_VERTCOLOR); cout << "Done AO" << endl; std::vector unifDirVec; std::vector ndir; GenNormal::Fibonacci(nOfRays,unifDirVec); Point3f dir(0, 1, 0); for (int g = 0; g < nOfRays; g++) { if (unifDirVec.at(g) >= dir) { ndir.push_back(unifDirVec.at(g)); } } adaptor = EmbreeAdaptor(m2); adaptor.computeAmbientOcclusion(m2,ndir); tri::UpdateQuality::VertexFromFace(m2); tri::UpdateColor::PerVertexQualityGray(m2); tri::io::ExporterOFF::Save(m2,"testAODir.off",tri::io::Mask::IOM_VERTCOLOR); cout << "Done AO Directioned" << endl; EmbreeAdaptor adaptor2 = EmbreeAdaptor(m4); adaptor2.computeSDF(m4,nOfRays,90); tri::UpdateQuality::VertexFromFace(m4); tri::UpdateColor::PerVertexQualityRamp(m4); tri::io::ExporterOFF::Save(m4,"testSDF.off",tri::io::Mask::IOM_VERTCOLOR); cout << "Done SDF" << endl; adaptor = EmbreeAdaptor(m5); adaptor.computeNormalAnalysis(m5, nOfRays); tri::io::ExporterOFF::Save(m5, "testNormal.off", tri::io::Mask::IOM_FACENORMAL); //vector BentNormal = adaptor.AOBentNormal(m5,nOfRays); cout << "Done NormalAnlysis" << endl; adaptor = EmbreeAdaptor(m6); Point3f p(1, 0, 0); adaptor.selectVisibleFaces(m6, p); tri::io::ExporterOFF::Save(m6, "testSelectS.off", tri::io::Mask::IOM_FACECOLOR); cout << "done face selection" << endl; adaptor = EmbreeAdaptor(m7); adaptor.computeObscurance(m7,nOfRays,0.01f); tri::UpdateQuality::VertexFromFace(m7); tri::UpdateColor::PerVertexQualityGray(m7); tri::io::ExporterOFF::Save(m7,"testAObs.off",tri::io::Mask::IOM_VERTCOLOR); cout << "Done AObs" << endl; cout << "Done All" << endl; return 0; }