From c693687927eba1482e7f21e96523e346c0cd4787 Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Wed, 3 May 2017 20:23:10 -0700 Subject: [PATCH] react to very small vectors instead of just zero-length ones --- libraries/physics/src/ObjectConstraintHinge.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/libraries/physics/src/ObjectConstraintHinge.cpp b/libraries/physics/src/ObjectConstraintHinge.cpp index 730fe5683e..cf91ca904b 100644 --- a/libraries/physics/src/ObjectConstraintHinge.cpp +++ b/libraries/physics/src/ObjectConstraintHinge.cpp @@ -104,13 +104,13 @@ btTypedConstraint* ObjectConstraintHinge::getConstraint() { return nullptr; } - if (glm::length(axisInA) == 0.0f) { + if (glm::length(axisInA) < FLT_EPSILON) { qCWarning(physics) << "hinge axis cannot be a zero vector"; axisInA = DEFAULT_HINGE_AXIS; + } else { + axisInA = glm::normalize(axisInA); } - axisInA = glm::normalize(axisInA); - if (!otherEntityID.isNull()) { // This hinge is between two entities... find the other rigid body. btRigidBody* rigidBodyB = getOtherRigidBody(otherEntityID); @@ -118,13 +118,13 @@ btTypedConstraint* ObjectConstraintHinge::getConstraint() { return nullptr; } - if (glm::length(axisInB)) { + if (glm::length(axisInB) < FLT_EPSILON) { qCWarning(physics) << "hinge axis cannot be a zero vector"; axisInB = DEFAULT_HINGE_AXIS; + } else { + axisInB = glm::normalize(axisInB); } - axisInB = glm::normalize(axisInB); - constraint = new btHingeConstraint(*rigidBodyA, *rigidBodyB, glmToBullet(pivotInA), glmToBullet(pivotInB), glmToBullet(axisInA), glmToBullet(axisInB),