From 33c6b0ec1a352d964d504c49ea0c09e99b390817 Mon Sep 17 00:00:00 2001 From: Hein-Pieter van Braam Date: Fri, 1 Mar 2019 20:35:26 +0000 Subject: Scale quickhull tolerance with mesh size Taken from three.js's implementation. Tested with a wide variety of meshes. --- core/math/quick_hull.cpp | 4 ++-- core/math/quick_hull.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) (limited to 'core/math') diff --git a/core/math/quick_hull.cpp b/core/math/quick_hull.cpp index bc2b4e6fe0..fc2eb1454d 100644 --- a/core/math/quick_hull.cpp +++ b/core/math/quick_hull.cpp @@ -36,8 +36,6 @@ uint32_t QuickHull::debug_stop_after = 0xFFFFFFFF; Error QuickHull::build(const Vector &p_points, Geometry::MeshData &r_mesh) { - static const real_t over_tolerance = 0.0001; - /* CREATE AABB VOLUME */ AABB aabb; @@ -180,6 +178,8 @@ Error QuickHull::build(const Vector &p_points, Geometry::MeshData &r_me faces.push_back(f); } + real_t over_tolerance = 3 * UNIT_EPSILON * (aabb.size.x + aabb.size.y + aabb.size.z); + /* COMPUTE AVAILABLE VERTICES */ for (int i = 0; i < p_points.size(); i++) { diff --git a/core/math/quick_hull.h b/core/math/quick_hull.h index 2e659cab6e..a445a47cbe 100644 --- a/core/math/quick_hull.h +++ b/core/math/quick_hull.h @@ -64,7 +64,7 @@ public: struct Face { Plane plane; - int vertices[3]; + uint32_t vertices[3]; Vector points_over; bool operator<(const Face &p_face) const { -- cgit v1.2.3