소스 검색

Scale quickhull tolerance with mesh size

Taken from three.js's implementation. Tested with a wide variety of
meshes.
Hein-Pieter van Braam 6 년 전
부모
커밋
33c6b0ec1a
2개의 변경된 파일3개의 추가작업 그리고 3개의 파일을 삭제
  1. 2 2
      core/math/quick_hull.cpp
  2. 1 1
      core/math/quick_hull.h

+ 2 - 2
core/math/quick_hull.cpp

@@ -36,8 +36,6 @@ uint32_t QuickHull::debug_stop_after = 0xFFFFFFFF;
 
 Error QuickHull::build(const Vector<Vector3> &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<Vector3> &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++) {

+ 1 - 1
core/math/quick_hull.h

@@ -64,7 +64,7 @@ public:
 	struct Face {
 
 		Plane plane;
-		int vertices[3];
+		uint32_t vertices[3];
 		Vector<int> points_over;
 
 		bool operator<(const Face &p_face) const {