more on AABB demo

This commit is contained in:
Pierre Alliez 2009-06-29 15:55:58 +00:00
parent aa4dcf9b6f
commit 1dfddba18a
3 changed files with 148 additions and 92 deletions

View File

@ -10,7 +10,7 @@ if(COMMAND cmake_policy)
cmake_policy(SET CMP0003 NEW) cmake_policy(SET CMP0003 NEW)
endif(COMMAND cmake_policy) endif(COMMAND cmake_policy)
foreach(INCDIR ../include ../../../STL_Extension/include ../../../GraphicsView/include ../../../filtered_kernel/include ) foreach(INCDIR ../../include ../../../../STL_Extension/include ../../../GraphicsView/include ../../../filtered_kernel/include )
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${INCDIR}") if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${INCDIR}")
include_directories (BEFORE "${CMAKE_CURRENT_SOURCE_DIR}/${INCDIR}") include_directories (BEFORE "${CMAKE_CURRENT_SOURCE_DIR}/${INCDIR}")
endif() endif()

View File

@ -312,8 +312,62 @@ void Scene::benchmark_intersections()
bench_nb_intersections(tree); bench_nb_intersections(tree);
bench_any_intersection(tree); bench_any_intersection(tree);
bench_all_intersections(tree); bench_all_intersections(tree);
bench_all_intersected_primitives(tree);
} }
void Scene::bench_all_intersected_primitives(Facet_tree& tree)
{
std::list<Primitive_id> primitive_ids;
QTime time;
time.start();
std::cout << "Benchmark all_intersected_primitives" << std::endl;
// with ray
unsigned int nb = 0;
while(time.elapsed() < 1000)
{
Point p = random_point();
Point q = random_point();
Ray ray(p,q);
tree.all_intersected_primitives(ray,std::back_inserter(primitive_ids));
nb++;
}
double speed = 1000.0 * nb / time.elapsed();
std::cout << speed << " queries/s with ray" << std::endl;
primitive_ids.clear();
// with line
nb = 0;
time.start();
while(time.elapsed() < 1000)
{
Point p = random_point();
Point q = random_point();
Line line(p,q);
tree.all_intersected_primitives(line,std::back_inserter(primitive_ids));
nb++;
}
speed = 1000.0 * nb / time.elapsed();
std::cout << speed << " queries/s with line" << std::endl;
primitive_ids.clear();
// with segment
nb = 0;
time.start();
while(time.elapsed() < 1000)
{
Point p = random_point();
Point q = random_point();
Segment segment(p,q);
tree.all_intersected_primitives(segment,std::back_inserter(primitive_ids));
nb++;
}
speed = 1000.0 * nb / time.elapsed();
std::cout << speed << " queries/s with segment" << std::endl;
}
void Scene::bench_do_intersect(Facet_tree& tree) void Scene::bench_do_intersect(Facet_tree& tree)
{ {
QTime time; QTime time;

View File

@ -93,11 +93,13 @@ private:
typedef CGAL::AABB_traits<Kernel, Primitive> Traits; typedef CGAL::AABB_traits<Kernel, Primitive> Traits;
typedef CGAL::AABB_tree<Traits> Facet_tree; typedef CGAL::AABB_tree<Traits> Facet_tree;
typedef Facet_tree::Object_and_primitive_id Object_and_primitive_id; typedef Facet_tree::Object_and_primitive_id Object_and_primitive_id;
typedef Facet_tree::Primitive_id Primitive_id;
void bench_do_intersect(Facet_tree& tree); void bench_do_intersect(Facet_tree& tree);
void bench_nb_intersections(Facet_tree& tree); void bench_nb_intersections(Facet_tree& tree);
void bench_any_intersection(Facet_tree& tree); void bench_any_intersection(Facet_tree& tree);
void bench_all_intersections(Facet_tree& tree); void bench_all_intersections(Facet_tree& tree);
void bench_all_intersected_primitives(Facet_tree& tree);
}; // end class Scene }; // end class Scene