[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [46655] trunk/blender: Fix El Topo:

Daniel Genrich daniel.genrich at gmx.net
Tue May 15 13:35:01 CEST 2012


Revision: 46655
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=46655
Author:   genscher
Date:     2012-05-15 11:35:01 +0000 (Tue, 15 May 2012)
Log Message:
-----------
Fix El Topo:
- Library compile errors
- 2 Bugs (have been reported to lib owner)
- LAPACK for cmake

TODO:
- Scons is still missing LAPACK lib define
- Do other platforms got LAPACK lib? 

Modified Paths:
--------------
    trunk/blender/CMakeLists.txt
    trunk/blender/build_files/cmake/macros.cmake
    trunk/blender/extern/eltopo/CMakeLists.txt
    trunk/blender/extern/eltopo/common/ccd_defs.h
    trunk/blender/extern/eltopo/eltopo3d/collisionpipeline.cpp
    trunk/blender/extern/eltopo/eltopo3d/dynamicsurface.cpp
    trunk/blender/extern/eltopo/eltopo3d/dynamicsurface.h
    trunk/blender/extern/eltopo/eltopo3d/eltopo.cpp

Modified: trunk/blender/CMakeLists.txt
===================================================================
--- trunk/blender/CMakeLists.txt	2012-05-15 11:14:50 UTC (rev 46654)
+++ trunk/blender/CMakeLists.txt	2012-05-15 11:35:01 UTC (rev 46655)
@@ -837,6 +837,15 @@
 			set(GETTEXT_LIBPATH ${GETTEXT}/lib)
 			set(GETTEXT_LIBRARIES gnu_gettext)
 		endif()
+		
+		set(LAPACK ${LIBDIR}/lapack)
+		# set(LAPACK_INCLUDE_DIR ${LAPACK}/include)
+		set_lib_path(LAPACK_LIBPATH ${LAPACK}/lib)	
+		set(LAPACK_LIBRARIES
+			${LIBDIR}/lapack/lib/libf2c.lib
+			${LIBDIR}/lapack/lib/clapack_nowrap.lib
+			${LIBDIR}/lapack/lib/BLAS_nowrap.lib
+		)
 
 		set(PNG_LIBRARIES libpng)
 		set(JPEG_LIBRARIES libjpeg)

Modified: trunk/blender/build_files/cmake/macros.cmake
===================================================================
--- trunk/blender/build_files/cmake/macros.cmake	2012-05-15 11:14:50 UTC (rev 46654)
+++ trunk/blender/build_files/cmake/macros.cmake	2012-05-15 11:35:01 UTC (rev 46655)
@@ -214,7 +214,8 @@
 			${OPENGL_glu_LIBRARY}
 			${PNG_LIBRARIES}
 			${ZLIB_LIBRARIES}
-			${FREETYPE_LIBRARY})
+			${FREETYPE_LIBRARY}
+			${LAPACK_LIBRARIES})
 
 	# since we are using the local libs for python when compiling msvc projects, we need to add _d when compiling debug versions
 	if(WITH_PYTHON)  # AND NOT WITH_PYTHON_MODULE  # WIN32 needs

Modified: trunk/blender/extern/eltopo/CMakeLists.txt
===================================================================
--- trunk/blender/extern/eltopo/CMakeLists.txt	2012-05-15 11:14:50 UTC (rev 46654)
+++ trunk/blender/extern/eltopo/CMakeLists.txt	2012-05-15 11:35:01 UTC (rev 46655)
@@ -50,15 +50,25 @@
 	common/makelevelset3.cpp
 	common/marching_triangles.cpp
 	common/predicates.cpp
+	common/runstats.cpp
 	common/sos_ccd_wrapper.cpp
 	common/wallclocktime.cpp
 	eltopo3d/accelerationgrid.cpp
 	eltopo3d/broadphasegrid.cpp
+	eltopo3d/collisionpipeline.cpp
 	eltopo3d/dynamicsurface.cpp
+	eltopo3d/edgecollapser.cpp
+	eltopo3d/edgeflipper.cpp
+	eltopo3d/edgesplitter.cpp
 	eltopo3d/eltopo.cpp
+	eltopo3d/impactzonesolver.cpp
+	eltopo3d/meshmerger.cpp
+	eltopo3d/meshsmoother.cpp
+	eltopo3d/meshpincher.cpp
 	eltopo3d/nondestructivetrimesh.cpp
 	eltopo3d/subdivisionscheme.cpp
 	eltopo3d/surftrack.cpp
+	eltopo3d/trianglequality.cpp
 	common/newsparse/dense_matrix.cpp
 	common/newsparse/krylov_solvers.cpp
 	common/newsparse/sparse_matrix.cpp

Modified: trunk/blender/extern/eltopo/common/ccd_defs.h
===================================================================
--- trunk/blender/extern/eltopo/common/ccd_defs.h	2012-05-15 11:14:50 UTC (rev 46654)
+++ trunk/blender/extern/eltopo/common/ccd_defs.h	2012-05-15 11:35:01 UTC (rev 46655)
@@ -11,7 +11,7 @@
 // Uncomment one of the following (cubic solver version has been tested hardest):
 //
 
-//#define USE_CUBIC_SOLVER_CCD
+// #define USE_CUBIC_SOLVER_CCD
 #define USE_TUNICATE_CCD
 
 #endif

Modified: trunk/blender/extern/eltopo/eltopo3d/collisionpipeline.cpp
===================================================================
--- trunk/blender/extern/eltopo/eltopo3d/collisionpipeline.cpp	2012-05-15 11:14:50 UTC (rev 46654)
+++ trunk/blender/extern/eltopo/eltopo3d/collisionpipeline.cpp	2012-05-15 11:35:01 UTC (rev 46655)
@@ -126,7 +126,7 @@
     double s3 = alphas[3];
     
     double i = impulse_magnitude / (s0*s0*inv_m0 + s1*s1*inv_m1 + s2*s2*inv_m2 + s3*s3*inv_m3);
-    
+
     if ( i > 100.0 / dt )
     {
         std::cout << "big impulse: " << i << std::endl;
@@ -732,7 +732,7 @@
                 
                 g_stats.add_to_int( "CollisionPipeline::total_num_collisions", 1 );
                 
-                double relvel = collision.m_relative_displacement / dt;
+                double relvel = collision.m_relative_displacement * dt;
                 double desired_relative_velocity = 0.0;
                 double impulse = IMPULSE_MULTIPLIER * (desired_relative_velocity - relvel);
                 apply_edge_edge_impulse( collision, impulse, dt );
@@ -752,7 +752,8 @@
                     add_point_update_candidates( collision.m_vertex_indices[3], new_candidates);
                 }
             }
-        }
+		}
+
         else
         {
             // point-triangle
@@ -763,7 +764,8 @@
                 
                 g_stats.add_to_int( "CollisionPipeline::total_num_collisions", 1 );
                 
-                double relvel = collision.m_relative_displacement / dt;
+                double relvel = collision.m_relative_displacement * dt;
+				// printf("collision.m_relative_displacement: %lf\n", collision.m_relative_displacement);
                 double desired_relative_velocity = 0.0;
                 double impulse = IMPULSE_MULTIPLIER * (desired_relative_velocity - relvel);
                 apply_triangle_point_impulse( collision, impulse, dt );
@@ -784,7 +786,8 @@
                 }  
             }
             
-        }
+		}
+
     }
     
     if ( m_surface.m_verbose && max_iteration > 0 && i >= max_iteration )
@@ -1040,14 +1043,14 @@
         status.all_candidates_processed = false;
         
         // dynamic point vs solid triangles
-        
+      
         dynamic_point_vs_solid_triangle_collisions( dt,
                                                    collect_candidates,
                                                    update_collision_candidates,
                                                    status );
         
         collision_found |= status.collision_found;
-        
+
         // dynamic triangle vs static points
         // dynamic triangle vs dynamic points
         
@@ -1067,7 +1070,7 @@
                                             status );
         
         collision_found |= status.collision_found;
-        
+  
         if ( status.overflow )
         {
             if ( verbose )

Modified: trunk/blender/extern/eltopo/eltopo3d/dynamicsurface.cpp
===================================================================
--- trunk/blender/extern/eltopo/eltopo3d/dynamicsurface.cpp	2012-05-15 11:14:50 UTC (rev 46654)
+++ trunk/blender/extern/eltopo/eltopo3d/dynamicsurface.cpp	2012-05-15 11:35:01 UTC (rev 46655)
@@ -504,8 +504,8 @@
             bool all_collisions_handled = false;
             
             all_collisions_handled = m_collision_pipeline->handle_collisions( curr_dt );
+
             
-            
             // failsafe impact zones 
             
             ImpactZoneSolver impactZoneSolver( *this );
@@ -555,22 +555,22 @@
                     assert( false );
                 }
                 
-                if ( m_verbose )
-                {
+				if ( m_verbose )
+				{
                     std::cout << "Intersection in predicted mesh, cutting timestep." << std::endl;
-                }
-                
+				}
+
                 // back up and try again:
                 
                 curr_dt = 0.5 * curr_dt;
-                for ( size_t i = 0; i < get_num_vertices(); ++i )
-                {
-                    set_newposition( i, get_position(i) + 0.5 * ( saved_predicted_positions[i] - get_position(i) ) );
-                }
+				for ( size_t i = 0; i < get_num_vertices(); ++i )
+				{
+					set_newposition( i, get_position(i) + 0.5 * ( saved_predicted_positions[i] - get_position(i) ) );
+				}
                 
-                continue;      
+				continue;   
                 
-            }                 
+			}               
             
         }
         

Modified: trunk/blender/extern/eltopo/eltopo3d/dynamicsurface.h
===================================================================
--- trunk/blender/extern/eltopo/eltopo3d/dynamicsurface.h	2012-05-15 11:14:50 UTC (rev 46654)
+++ trunk/blender/extern/eltopo/eltopo3d/dynamicsurface.h	2012-05-15 11:35:01 UTC (rev 46655)
@@ -633,7 +633,10 @@
         if ( e[0] == e[1] )  { continue; }
         sum_lengths += mag( get_position(e[1]) - get_position(e[0]) ); 
     }
-    return sum_lengths / (double) m_mesh.m_edges.size();   
+
+	double len = sum_lengths / (double) m_mesh.m_edges.size();
+
+    return len;   
 }
 
 // --------------------------------------------------------
@@ -756,7 +759,7 @@
 inline bool DynamicSurface::edge_is_solid( size_t e ) const
 {
     const Vec2st& edge = m_mesh.m_edges[e];
-    return ( vertex_is_solid(edge[0]) || vertex_is_solid(edge[1]) );
+    return ( vertex_is_solid(edge[0]) && vertex_is_solid(edge[1]) );
 }
 
 // --------------------------------------------------------
@@ -768,7 +771,7 @@
 inline bool DynamicSurface::triangle_is_solid( size_t t ) const
 {
     const Vec3st& tri = m_mesh.get_triangle(t);
-    return ( vertex_is_solid(tri[0]) || vertex_is_solid(tri[1]) || vertex_is_solid(tri[2]) );
+    return ( vertex_is_solid(tri[0]) && vertex_is_solid(tri[1]) && vertex_is_solid(tri[2]) );
 }
 
 

Modified: trunk/blender/extern/eltopo/eltopo3d/eltopo.cpp
===================================================================
--- trunk/blender/extern/eltopo/eltopo3d/eltopo.cpp	2012-05-15 11:14:50 UTC (rev 46654)
+++ trunk/blender/extern/eltopo/eltopo3d/eltopo.cpp	2012-05-15 11:35:01 UTC (rev 46655)
@@ -10,6 +10,9 @@
 #include <eltopo.h>
 #include <surftrack.h>
 
+#include "../common/runstats.h"
+RunStats g_stats;
+
 // ---------------------------------------------------------
 ///
 /// Static operations: edge collapse, edge split, edge flip, null-space smoothing, and topological changes
@@ -225,7 +228,7 @@
     //
     
     // build a DynamicSurface
-    DynamicSurface dynamic_surface( vs, ts, masses, general_options->m_proximity_epsilon, options->m_friction_coefficient, general_options->m_collision_safety );
+	DynamicSurface dynamic_surface( vs, ts, masses, general_options->m_proximity_epsilon, options->m_friction_coefficient, general_options->m_collision_safety, general_options->m_verbose );
     
     dynamic_surface.set_all_newpositions( inputs->num_vertices, in_vertex_new_locations );
     




More information about the Bf-blender-cvs mailing list