From 3cc1861221d761b7f0301b9b61de4e1aa18c09f4 Mon Sep 17 00:00:00 2001 From: Sheikh Dawood Abdul Ajees Date: Mon, 20 Nov 2017 11:35:52 -0600 Subject: PhysX 3.4.1, APEX 1.4.1 Release @23131702 --- .../Source/PhysXExtensions/src/ExtConstraintHelper.h | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) (limited to 'PhysX_3.4/Source/PhysXExtensions/src/ExtConstraintHelper.h') diff --git a/PhysX_3.4/Source/PhysXExtensions/src/ExtConstraintHelper.h b/PhysX_3.4/Source/PhysXExtensions/src/ExtConstraintHelper.h index cf4d300c..6f45fca4 100644 --- a/PhysX_3.4/Source/PhysXExtensions/src/ExtConstraintHelper.h +++ b/PhysX_3.4/Source/PhysXExtensions/src/ExtConstraintHelper.h @@ -254,9 +254,16 @@ namespace Ext if(lin) { PxMat33 axes(qA); - if(lin&1) linear(axes[0], -cB2cAp[0], PxConstraintSolveHint::eEQUALITY, current++); - if(lin&2) linear(axes[1], -cB2cAp[1], PxConstraintSolveHint::eEQUALITY, current++); - if(lin&4) linear(axes[2], -cB2cAp[2], PxConstraintSolveHint::eEQUALITY, current++); + + PxVec3 error(0.f); + + if(lin&1) error -= axes[0]*cB2cAp[0]; + if(lin&2) error -= axes[1]*cB2cAp[1]; + if(lin&4) error -= axes[2]*cB2cAp[2]; + + if(lin&1) linear(axes[0], -cB2cAp[0], PxConstraintSolveHint::eEQUALITY, current++, error); + if(lin&2) linear(axes[1], -cB2cAp[1], PxConstraintSolveHint::eEQUALITY, current++, error); + if(lin&4) linear(axes[2], -cB2cAp[2], PxConstraintSolveHint::eEQUALITY, current++, error); } for(Px1DConstraint* front = mCurrent; front < current; front++) @@ -300,10 +307,11 @@ namespace Ext return c; } - PX_FORCE_INLINE Px1DConstraint* linear(const PxVec3& axis, PxReal posErr, PxConstraintSolveHint::Enum hint, Px1DConstraint* c) + PX_FORCE_INLINE Px1DConstraint* linear(const PxVec3& axis, PxReal posErr, PxConstraintSolveHint::Enum hint, Px1DConstraint* c, + const PxVec3& errorVec) { c->solveHint = PxU16(hint); - c->linear0 = axis; c->angular0 = mRa.cross(axis); + c->linear0 = axis; c->angular0 = (mRa + errorVec).cross(axis); c->linear1 = axis; c->angular1 = mRb.cross(axis); PX_ASSERT(c->linear0.isFinite()); PX_ASSERT(c->linear1.isFinite()); -- cgit v1.2.3