From bf3ff8daea9e53359ea15e11c72d2ff0f1fe2b58 Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Wed, 22 Jul 2015 15:06:10 -0700 Subject: [PATCH] fix crash for convex hull of co-planar points --- libraries/physics/src/ShapeFactory.cpp | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/libraries/physics/src/ShapeFactory.cpp b/libraries/physics/src/ShapeFactory.cpp index 74b0304ace..cfe7abd4db 100644 --- a/libraries/physics/src/ShapeFactory.cpp +++ b/libraries/physics/src/ShapeFactory.cpp @@ -43,9 +43,18 @@ btConvexHullShape* ShapeFactory::createConvexHull(const QVector& poin const float MIN_MARGIN = 0.01f; glm::vec3 diagonal = maxCorner - minCorner; - float minDimension = glm::min(diagonal[0], diagonal[1]); - minDimension = glm::min(minDimension, diagonal[2]); - margin = glm::min(glm::max(0.5f * minDimension, MIN_MARGIN), margin); + float smallestDimension = glm::min(diagonal[0], diagonal[1]); + smallestDimension = glm::min(smallestDimension, diagonal[2]); + const float MIN_DIMENSION = 2.0f * MIN_MARGIN + 0.001f; + if (smallestDimension < MIN_DIMENSION) { + for (int i = 0; i < 3; ++i) { + if (diagonal[i] < MIN_DIMENSION) { + diagonal[i] = MIN_DIMENSION; + } + } + smallestDimension = MIN_DIMENSION; + } + margin = glm::min(glm::max(0.5f * smallestDimension, MIN_MARGIN), margin); hull->setMargin(margin); // add the points, correcting for margin