aboutsummaryrefslogtreecommitdiff
path: root/PhysX_3.4/Source/PhysXExtensions/src/ExtConstraintHelper.h
diff options
context:
space:
mode:
authorSheikh Dawood Abdul Ajees <[email protected]>2017-11-20 11:35:52 -0600
committerSheikh Dawood Abdul Ajees <[email protected]>2017-11-20 11:35:52 -0600
commit3cc1861221d761b7f0301b9b61de4e1aa18c09f4 (patch)
treea51eb808016e1710a4bbd537000a493250602944 /PhysX_3.4/Source/PhysXExtensions/src/ExtConstraintHelper.h
parentPhysX 3.4.1, APEX 1.4.1 Release @22845541 (diff)
downloadphysx-3.4-3cc1861221d761b7f0301b9b61de4e1aa18c09f4.tar.xz
physx-3.4-3cc1861221d761b7f0301b9b61de4e1aa18c09f4.zip
PhysX 3.4.1, APEX 1.4.1 Release @23131702
Diffstat (limited to 'PhysX_3.4/Source/PhysXExtensions/src/ExtConstraintHelper.h')
-rw-r--r--PhysX_3.4/Source/PhysXExtensions/src/ExtConstraintHelper.h18
1 files changed, 13 insertions, 5 deletions
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());