From 190129a7bae621b32317ce93d23400cfc3a3ae75 Mon Sep 17 00:00:00 2001 From: schuellc Date: Fri, 18 Sep 2015 14:34:01 +0200 Subject: [PATCH 1/6] small fix in viewer Former-commit-id: e5859cc80077270494a954160b2f1b1e75b497fd --- include/igl/viewer/Viewer.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/include/igl/viewer/Viewer.cpp b/include/igl/viewer/Viewer.cpp index 13dc20862..bc08e90a7 100644 --- a/include/igl/viewer/Viewer.cpp +++ b/include/igl/viewer/Viewer.cpp @@ -867,6 +867,7 @@ namespace viewer launch_init(resizable,fullscreen); launch_rendering(true); launch_shut(); + return 1; } } // end namespace } From 11ba159664fff2db058818d442932ba835c232f7 Mon Sep 17 00:00:00 2001 From: schuellc Date: Wed, 2 Dec 2015 17:00:17 +0100 Subject: [PATCH 2/6] Fix LIM solver issues and add some improvments Former-commit-id: edc680b9751d90b4cd841634f99fc680f4d25c9d --- include/igl/lim/lim.cpp | 34 ++++++++++++++++++---------------- include/igl/lim/lim.h | 33 ++++++++++++++++----------------- tutorial/608_LIM/main.cpp | 14 +++++++------- tutorial/CMakeLists.txt | 1 + tutorial/cmake/FindLIM.cmake | 3 +++ 5 files changed, 45 insertions(+), 40 deletions(-) diff --git a/include/igl/lim/lim.cpp b/include/igl/lim/lim.cpp index dcd7b298e..599579ed4 100644 --- a/include/igl/lim/lim.cpp +++ b/include/igl/lim/lim.cpp @@ -8,37 +8,39 @@ #include "lim.h" #include -IGL_INLINE int igl::lim::lim( +using namespace igl::lim; + +IGL_INLINE State lim( Eigen::Matrix& vertices, const Eigen::Matrix& initialVertices, const Eigen::Matrix& elements, const Eigen::SparseMatrix& constraintMatrix, const Eigen::Matrix& constraintTargets, - int energyType, + Energy energyType, double tolerance, int maxIteration, bool findLocalMinima) { - return ComputeLIM( + return (State)ComputeLIM( vertices, initialVertices, elements, constraintMatrix, constraintTargets, - energyType, + (EnergyType)energyType, tolerance, maxIteration, findLocalMinima ); } -IGL_INLINE int igl::lim( +IGL_INLINE State igl::lim::lim( Eigen::Matrix& vertices, const Eigen::Matrix& initialVertices, const Eigen::Matrix& elements, const Eigen::SparseMatrix& constraintMatrix, const Eigen::Matrix& constraintTargets, - int energyType, + Energy energyType, double tolerance, int maxIteration, bool findLocalMinima, @@ -48,13 +50,13 @@ IGL_INLINE int igl::lim( double beta, double eps) { - return ComputeLIM( + return (State)ComputeLIM( vertices, initialVertices, elements, constraintMatrix, constraintTargets, - energyType, + (EnergyType)energyType, tolerance, maxIteration, findLocalMinima, @@ -66,7 +68,7 @@ IGL_INLINE int igl::lim( ); } -IGL_INLINE int igl::lim( +IGL_INLINE State igl::lim::lim( Eigen::Matrix& vertices, const Eigen::Matrix& initialVertices, const Eigen::Matrix& elements, @@ -74,12 +76,12 @@ IGL_INLINE int igl::lim( const Eigen::Matrix& gradients, const Eigen::SparseMatrix& constraintMatrix, const Eigen::Matrix& constraintTargets, - int energyType, + Energy energyType, double tolerance, int maxIteration, bool findLocalMinima) { - return ComputeLIM( + return (State)ComputeLIM( vertices, initialVertices, elements, @@ -87,14 +89,14 @@ IGL_INLINE int igl::lim( gradients, constraintMatrix, constraintTargets, - energyType, + (EnergyType)energyType, tolerance, maxIteration, findLocalMinima ); } -IGL_INLINE int igl::lim( +IGL_INLINE State igl::lim::lim( Eigen::Matrix& vertices, const Eigen::Matrix& initialVertices, const Eigen::Matrix& elements, @@ -102,7 +104,7 @@ IGL_INLINE int igl::lim( const Eigen::Matrix& gradients, const Eigen::SparseMatrix& constraintMatrix, const Eigen::Matrix& constraintTargets, - int energyType, + Energy energyType, double tolerance, int maxIteration, bool findLocalMinima, @@ -112,7 +114,7 @@ IGL_INLINE int igl::lim( double beta, double eps) { - return ComputeLIM( + return (State)ComputeLIM( vertices, initialVertices, elements, @@ -120,7 +122,7 @@ IGL_INLINE int igl::lim( gradients, constraintMatrix, constraintTargets, - energyType, + (EnergyType)energyType, tolerance, maxIteration, findLocalMinima, diff --git a/include/igl/lim/lim.h b/include/igl/lim/lim.h index 3236a4b4a..ab4999d80 100644 --- a/include/igl/lim/lim.h +++ b/include/igl/lim/lim.h @@ -15,9 +15,6 @@ namespace igl { namespace lim { - // Known issues: energy type should be a readable enum rather than magic - // ints. - // // Computes a locally injective mapping of a triangle or tet-mesh based on // a deformation energy subject to some provided linear positional // constraints Cv-d. @@ -39,7 +36,7 @@ namespace igl // y_2, ..., x_v,y_v]) // constraintTargets d: c vector target positions // energyType type of used energy: - // 0=Dirichlet,1=Laplacian,2=Green,3=ARAP,4=LSCM + // Dirichlet, Laplacian, Green, ARAP, LSCM, Poisson (only 2D), UniformLaplacian, Identity // tolerance max squared positional constraints error // maxIteration max number of iterations // findLocalMinima iterating until a local minima is found. If not @@ -61,30 +58,32 @@ namespace igl // mesh //-------------------------------------------------------------------------- // Return values: - // 1 : Optimization deemed successful because either (a) it stagnated - // (very step size) or (b) positional constraints were satisfied. (re: - // https://github.com/libigl/libigl/issues/79 ) - // -1 : Max iteration reached before tolerance was fulfilled - // -2 : not feasible -> has inverted elements (may want to decrease eps?) + // Succeeded : Successful optimization with fulfilled tolerance + // LocalMinima : Convergenged to a local minima / tolerance not fullfilled + // IterationLimit : Max iteration reached before tolerance was fulfilled + // Infeasible : not feasible -> has inverted elements (decrease eps?) - int lim( + enum Energy { Dirichlet = 0, Laplacian=1, Green=2, ARAP=3, LSCM=4, Poisson=5, UniformLaplacian=6, Identity=7 }; + enum State { Uninitialized = -4, Infeasible = -3, IterationLimit = -2, LocalMinima = -1, Running = 0, Succeeded = 1 }; + + State lim( Eigen::Matrix& vertices, const Eigen::Matrix& initialVertices, const Eigen::Matrix& elements, const Eigen::SparseMatrix& constraintMatrix, const Eigen::Matrix& constraintTargets, - int energyType, + Energy energyType, double tolerance, int maxIteration, bool findLocalMinima); - int lim( + State lim( Eigen::Matrix& vertices, const Eigen::Matrix& initialVertices, const Eigen::Matrix& elements, const Eigen::SparseMatrix& constraintMatrix, const Eigen::Matrix& constraintTargets, - int energyType, + Energy energyType, double tolerance, int maxIteration, bool findLocalMinima, @@ -94,7 +93,7 @@ namespace igl double beta, double eps); - int lim( + State lim( Eigen::Matrix& vertices, const Eigen::Matrix& initialVertices, const Eigen::Matrix& elements, @@ -102,12 +101,12 @@ namespace igl const Eigen::Matrix& gradients, const Eigen::SparseMatrix& constraintMatrix, const Eigen::Matrix& constraintTargets, - int energyType, + Energy energyType, double tolerance, int maxIteration, bool findLocalMinima); - int lim( + State lim( Eigen::Matrix& vertices, const Eigen::Matrix& initialVertices, const Eigen::Matrix& elements, @@ -115,7 +114,7 @@ namespace igl const Eigen::Matrix& gradients, const Eigen::SparseMatrix& constraintMatrix, const Eigen::Matrix& constraintTargets, - int energyType, + Energy energyType, double tolerance, int maxIteration, bool findLocalMinima, diff --git a/tutorial/608_LIM/main.cpp b/tutorial/608_LIM/main.cpp index f032e53e9..6b4b4bb69 100644 --- a/tutorial/608_LIM/main.cpp +++ b/tutorial/608_LIM/main.cpp @@ -7,6 +7,8 @@ #include "tutorial_shared_path.h" +using namespace igl::lim; + // Mesh Eigen::MatrixX3d V0; Eigen::MatrixX3d V1; @@ -15,7 +17,7 @@ Eigen::MatrixXi F; Eigen::SparseMatrix C; Eigen::VectorXd b; -int energyType; +Energy energyType; bool barriersEnabled; // This function is called every time a keyboard button is pressed @@ -28,7 +30,7 @@ bool key_down(igl::viewer::Viewer& viewer,unsigned char key,int modifier) if(key >= '0' && key <= '5' || key == 'B') { // compute locally injective map - int energy = key - '1'; + Energy energy = Energy(key - '1'); V1 = V0; @@ -44,8 +46,7 @@ bool key_down(igl::viewer::Viewer& viewer,unsigned char key,int modifier) if(key != '0') { - igl::lim::lim( - V1,V0,F,C,b,energyType,1e-8,100,true,true,barriersEnabled,true,-1,-1); + lim(V1,V0,F,C,b,energyType,1e-8,100,true,true,barriersEnabled,true,-1,-1); } // set mesh @@ -62,7 +63,7 @@ int main(int argc, char *argv[]) using namespace std; using namespace Eigen; - energyType = 0; + energyType = Dirichlet; barriersEnabled = true; // load a mesh in OFF format @@ -102,8 +103,7 @@ int main(int argc, char *argv[]) b(2*fixedVertices.size()+1) = 0.2; // compute locally injective map - igl::lim::lim( - V1,V0,F,C,b,energyType,1e-8,100,true,true,barriersEnabled,true,-1,-1); + lim(V1,V0,F,C,b,energyType,1e-8,100,true,true,barriersEnabled,true,-1,-1); // Show mesh igl::viewer::Viewer viewer; diff --git a/tutorial/CMakeLists.txt b/tutorial/CMakeLists.txt index 7c4ced872..4611b50d9 100644 --- a/tutorial/CMakeLists.txt +++ b/tutorial/CMakeLists.txt @@ -31,6 +31,7 @@ find_package(MOSEK QUIET) find_package(TETGEN QUIET) find_package(TINYXML2 QUIET) find_package(TRIANGLE QUIET) +find_package(LIM QUIET) message(STATUS "CMAKE_CXX_FLAGS: ${CMAKE_CXX_FLAGS}") include("CMakeLists.shared") diff --git a/tutorial/cmake/FindLIM.cmake b/tutorial/cmake/FindLIM.cmake index 1a3027a3d..537c6e84a 100644 --- a/tutorial/cmake/FindLIM.cmake +++ b/tutorial/cmake/FindLIM.cmake @@ -9,6 +9,7 @@ FIND_PATH(LIM_INCLUDE_DIR LIMSolverInterface.h /usr/include /usr/local/include ${PROJECT_SOURCE_DIR}/../libigl/external/lim/ + ${PROJECT_SOURCE_DIR}/../external/lim/ ${PROJECT_SOURCE_DIR}/../../external/lim/ NO_DEFAULT_PATH ) @@ -33,6 +34,8 @@ set( ${LIM_INCLUDE_DIR}/GreenStrain_LIMSolver3D.cpp ${LIM_INCLUDE_DIR}/LSConformal_LIMSolver2D.cpp ${LIM_INCLUDE_DIR}/Poisson_LIMSolver2D.cpp + ${LIM_INCLUDE_DIR}/Identity_LIMSolver2D.cpp + ${LIM_INCLUDE_DIR}/Identity_LIMSolver3D.cpp ) SET(LIM_FOUND "NO") From 0ea2eca5d494cac985222fc31aecda70e2c3188d Mon Sep 17 00:00:00 2001 From: schuellc Date: Wed, 2 Dec 2015 17:37:29 +0100 Subject: [PATCH 3/6] Add RowMajor storage order support Former-commit-id: 7e599d37fc0d36036b683e256daa2a38b4755934 --- include/igl/average_onto_vertices.cpp | 17 ++++++++--------- include/igl/average_onto_vertices.h | 11 +++++------ include/igl/boundary_loop.cpp | 4 ++-- include/igl/list_to_matrix.cpp | 12 ++++++------ include/igl/list_to_matrix.h | 12 ++++++------ include/igl/triangle_triangle_adjacency.h | 15 ++++++++------- 6 files changed, 35 insertions(+), 36 deletions(-) diff --git a/include/igl/average_onto_vertices.cpp b/include/igl/average_onto_vertices.cpp index a43d51383..676c66c27 100644 --- a/include/igl/average_onto_vertices.cpp +++ b/include/igl/average_onto_vertices.cpp @@ -7,15 +7,15 @@ // obtain one at http://mozilla.org/MPL/2.0/. #include "average_onto_vertices.h" -template -IGL_INLINE void igl::average_onto_vertices(const Eigen::Matrix &V, - const Eigen::Matrix &F, - const Eigen::Matrix &S, - Eigen::Matrix &SV) +template +IGL_INLINE void igl::average_onto_vertices(const Eigen::MatrixBase &V, + const Eigen::MatrixBase &F, + const Eigen::MatrixBase &S, + Eigen::MatrixBase &SV) { - - SV = Eigen::Matrix::Zero(V.rows(),S.cols()); - Eigen::Matrix COUNT = Eigen::Matrix::Zero(V.rows()); + SV = DerivedS::Zero(V.rows(),S.cols()); + Eigen::Matrix COUNT(V.rows()); + COUNT.setZero(); for (int i = 0; i - IGL_INLINE void average_onto_vertices( - const Eigen::Matrix &V, - const Eigen::Matrix &F, - const Eigen::Matrix &S, - Eigen::Matrix &SV); + template + IGL_INLINE void average_onto_vertices(const Eigen::MatrixBase &V, + const Eigen::MatrixBase &F, + const Eigen::MatrixBase &S, + Eigen::MatrixBase &SV); } #ifndef IGL_STATIC_LIBRARY diff --git a/include/igl/boundary_loop.cpp b/include/igl/boundary_loop.cpp index 6b6b9c7f8..dd5ed6599 100755 --- a/include/igl/boundary_loop.cpp +++ b/include/igl/boundary_loop.cpp @@ -23,8 +23,8 @@ IGL_INLINE void igl::boundary_loop( if(F.rows() == 0) return; - MatrixXd Vdummy(F.maxCoeff()+1,1); - MatrixXi TT,TTi; + VectorXd Vdummy(F.maxCoeff()+1,1); + DerivedF TT,TTi; vector > VF, VFi; triangle_triangle_adjacency(Vdummy,F,TT,TTi); vertex_triangle_adjacency(Vdummy,F,VF,VFi); diff --git a/include/igl/list_to_matrix.cpp b/include/igl/list_to_matrix.cpp index f808b7b8f..3c798ca58 100644 --- a/include/igl/list_to_matrix.cpp +++ b/include/igl/list_to_matrix.cpp @@ -15,8 +15,8 @@ #include "max_size.h" #include "min_size.h" -template -IGL_INLINE bool igl::list_to_matrix(const std::vector > & V,Mat & M) +template +IGL_INLINE bool igl::list_to_matrix(const std::vector > & V,Eigen::PlainObjectBase& M) { // number of rows int m = V.size(); @@ -48,12 +48,12 @@ IGL_INLINE bool igl::list_to_matrix(const std::vector > & V,Mat return true; } -template +template IGL_INLINE bool igl::list_to_matrix( const std::vector > & V, const int n, const T & padding, - Mat & M) + Eigen::PlainObjectBase& M) { const int m = V.size(); M.resize(m,n); @@ -77,8 +77,8 @@ IGL_INLINE bool igl::list_to_matrix( return true; } -template -IGL_INLINE bool igl::list_to_matrix(const std::vector & V,Mat & M) +template +IGL_INLINE bool igl::list_to_matrix(const std::vector & V,Eigen::PlainObjectBase& M) { // number of rows int m = V.size(); diff --git a/include/igl/list_to_matrix.h b/include/igl/list_to_matrix.h index 0146be49d..0145140e9 100644 --- a/include/igl/list_to_matrix.h +++ b/include/igl/list_to_matrix.h @@ -22,10 +22,10 @@ namespace igl // Outputs: // M an m by n matrix // Returns true on success, false on errors - template + template IGL_INLINE bool list_to_matrix( const std::vector > & V, - Mat & M); + Eigen::PlainObjectBase& M); // Convert a list of row vectors of `n` or less to a matrix and pad on // the right with `padding`: // @@ -35,15 +35,15 @@ namespace igl // padding value to fill in from right for short rows // Outputs: // M an m by n matrix - template + template IGL_INLINE bool list_to_matrix( const std::vector > & V, const int n, const T & padding, - Mat & M); + Eigen::PlainObjectBase& M); // Vector wrapper - template - IGL_INLINE bool list_to_matrix(const std::vector & V,Mat & M); + template + IGL_INLINE bool list_to_matrix(const std::vector & V,Eigen::PlainObjectBase& M); } #ifndef IGL_STATIC_LIBRARY diff --git a/include/igl/triangle_triangle_adjacency.h b/include/igl/triangle_triangle_adjacency.h index 3cdb575fc..e84c2394f 100644 --- a/include/igl/triangle_triangle_adjacency.h +++ b/include/igl/triangle_triangle_adjacency.h @@ -27,7 +27,7 @@ namespace igl // Outputs: // TT #F by #3 adjacent matrix, the element i,j is the id of the triangle adjacent to the j edge of triangle i // TTi #F by #3 adjacent matrix, the element i,j is the id of edge of the triangle TT(i,j) that is adjacent with triangle i - // NOTE: the first edge of a triangle is [0,1] the second [1,2] and the third [2,3]. + // NOTE: the first edge of a triangle is [0,1] the second [1,2] and the third [2,0]. // this convention is DIFFERENT from cotmatrix_entries.h // Known bug: this should not need to take V as input. @@ -36,6 +36,7 @@ namespace igl const Eigen::PlainObjectBase& V, const Eigen::PlainObjectBase& F, Eigen::PlainObjectBase& TT); + // Compute triangle-triangle adjacency with indices template IGL_INLINE void triangle_triangle_adjacency( @@ -84,8 +85,8 @@ namespace igl // TT[i][c][0] is an edge-neighbor of face i incident on the edge of face // TT[i][c][0] opposite corner j, and TT[i][c][1] " corner k, etc. template < - typename DerivedF, - typename TTIndex, + typename DerivedF, + typename TTIndex, typename TTiIndex> IGL_INLINE void triangle_triangle_adjacency( const Eigen::PlainObjectBase & F, @@ -98,8 +99,8 @@ namespace igl // Wrapper with bool to choose whether to compute TTi (this prototype should // be "hidden"). template < - typename DerivedF, - typename TTIndex, + typename DerivedF, + typename TTIndex, typename TTiIndex> IGL_INLINE void triangle_triangle_adjacency( const Eigen::PlainObjectBase & F, @@ -113,10 +114,10 @@ namespace igl // uE2E #uE list of lists of indices into E of coexisting edges // See also: unique_edge_map, all_edges template < - typename DerivedE, + typename DerivedE, typename DerivedEMAP, typename uE2EType, - typename TTIndex, + typename TTIndex, typename TTiIndex> IGL_INLINE void triangle_triangle_adjacency( const Eigen::PlainObjectBase & E, From c923c4218acc2456d6d39783e71923f30b8e2f3f Mon Sep 17 00:00:00 2001 From: schuellc Date: Wed, 2 Dec 2015 17:38:40 +0100 Subject: [PATCH 4/6] Fix nanogui menu tutorial Former-commit-id: 2ab9b5bab79ea8adc31fcebc2c98415db50ee222 --- tutorial/106_ViewerMenu/main.cpp | 18 +++++++++++------- tutorial/tutorial.md.REMOVED.git-id | 2 +- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/tutorial/106_ViewerMenu/main.cpp b/tutorial/106_ViewerMenu/main.cpp index b045a2189..96d10dab1 100755 --- a/tutorial/106_ViewerMenu/main.cpp +++ b/tutorial/106_ViewerMenu/main.cpp @@ -5,14 +5,15 @@ #include #include "tutorial_shared_path.h" -Eigen::MatrixXd V; -Eigen::MatrixXi F; - -bool boolVariable = true; -float floatVariable = 0.1f; - int main(int argc, char *argv[]) { + Eigen::MatrixXd V; + Eigen::MatrixXi F; + + bool boolVariable = true; + float floatVariable = 0.1f; + enum Orientation { Up=0,Down,Left,Right } dir = Up; + // Load a mesh in OFF format igl::readOFF(TUTORIAL_SHARED_PATH "/bunny.off", V, F); @@ -34,11 +35,14 @@ int main(int argc, char *argv[]) },[&]() { return boolVariable; // get }); + + // Expose an enumaration type + viewer.ngui->addVariable("Direction",dir)->setItems({"Up","Down","Left","Right"}); // Add a button viewer.ngui->addButton("Print Hello",[](){ std::cout << "Hello\n"; }); - // Add an additional bar + // Add an additional menu window viewer.ngui->addWindow(Eigen::Vector2i(220,10),"New Window"); // Expose the same variable directly ... diff --git a/tutorial/tutorial.md.REMOVED.git-id b/tutorial/tutorial.md.REMOVED.git-id index 4716e70fb..069c0f78a 100644 --- a/tutorial/tutorial.md.REMOVED.git-id +++ b/tutorial/tutorial.md.REMOVED.git-id @@ -1 +1 @@ -fbaf1dfab928d1ccc131e1283f7692ecd5e54c47 \ No newline at end of file +6142fa3500d239a20ed737fbf12adf1969c91886 \ No newline at end of file From 1a77d2cf0e3d623a41c9f628ff2399ee69108e0a Mon Sep 17 00:00:00 2001 From: schuellc Date: Wed, 2 Dec 2015 17:46:22 +0100 Subject: [PATCH 5/6] Add flag for static geometry support Former-commit-id: 9b2e945b340a32994ea748ec993dffda9a673ff0 --- include/igl/embree/EmbreeIntersector.h | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/include/igl/embree/EmbreeIntersector.h b/include/igl/embree/EmbreeIntersector.h index f4d4031ee..bbd11adc6 100644 --- a/include/igl/embree/EmbreeIntersector.h +++ b/include/igl/embree/EmbreeIntersector.h @@ -57,11 +57,13 @@ namespace igl // Inputs: // V #V by 3 list of vertex positions // F #F by 3 list of Oriented triangles + // isStatic scene is optimized for static geometry // Side effects: // The first time this is ever called the embree engine is initialized. inline void init( const PointMatrixType& V, - const FaceMatrixType& F); + const FaceMatrixType& F, + bool isStatic = false); // Initialize with a given mesh. // @@ -69,12 +71,14 @@ namespace igl // V vector of #V by 3 list of vertex positions for each geometry // F vector of #F by 3 list of Oriented triangles for each geometry // masks a 32 bit mask to identify active geometries. + // isStatic scene is optimized for static geometry // Side effects: // The first time this is ever called the embree engine is initialized. inline void init( const std::vector& V, const std::vector& F, - const std::vector& masks); + const std::vector& masks, + bool isStatic = false); // Deinitialize embree datasctructures for current mesh. Also called on // destruction: no need to call if you just want to init() once and @@ -252,7 +256,8 @@ inline igl::embree::EmbreeIntersector & igl::embree::EmbreeIntersector::operator inline void igl::embree::EmbreeIntersector::init( const PointMatrixType& V, - const FaceMatrixType& F) + const FaceMatrixType& F, + bool isStatic) { std::vector Vtemp; std::vector Ftemp; @@ -260,13 +265,14 @@ inline void igl::embree::EmbreeIntersector::init( Vtemp.push_back(&V); Ftemp.push_back(&F); masks.push_back(0xFFFFFFFF); - init(Vtemp,Ftemp,masks); + init(Vtemp,Ftemp,masks,isStatic); } inline void igl::embree::EmbreeIntersector::init( const std::vector& V, const std::vector& F, - const std::vector& masks) + const std::vector& masks, + bool isStatic) { if(initialized) @@ -282,7 +288,10 @@ inline void igl::embree::EmbreeIntersector::init( } // create a scene - scene = rtcNewScene(RTC_SCENE_ROBUST | RTC_SCENE_HIGH_QUALITY,RTC_INTERSECT1); + RTCSceneFlags flags = RTC_SCENE_ROBUST | RTC_SCENE_HIGH_QUALITY; + if(isStatic) + flags = flags | RTC_SCENE_STATIC; + scene = rtcNewScene(flags,RTC_INTERSECT1); for(int g=0;g<(int)V.size();g++) { From 9e3ef08bfa46eb1a796e63c757c7ef3177061eee Mon Sep 17 00:00:00 2001 From: schuellc Date: Thu, 3 Dec 2015 13:23:01 +0100 Subject: [PATCH 6/6] Update external/nanogui submodule Former-commit-id: 415e9a38329574b9b4058b40c35a28e7dd872f84