Applied patch to fix scaling on btCapsuleShape:
http://code.google.com/p/bullet/issues/detail?id=230 Thanks Chuck Spencer for report/fix! Applied patch to fix triangle mesh embedded in a btCompoundShape: http://code.google.com/p/bullet/issues/detail?id=229 Thanks Ola for reporting/fixing!
This commit is contained in:
@@ -296,13 +296,16 @@ void btCollisionWorld::rayTestSingle(const btTransform& rayFromTrans,const btTra
|
|||||||
btCollisionObject* m_collisionObject;
|
btCollisionObject* m_collisionObject;
|
||||||
btTriangleMeshShape* m_triangleMesh;
|
btTriangleMeshShape* m_triangleMesh;
|
||||||
|
|
||||||
|
btTransform m_colObjWorldTransform;
|
||||||
|
|
||||||
BridgeTriangleRaycastCallback( const btVector3& from,const btVector3& to,
|
BridgeTriangleRaycastCallback( const btVector3& from,const btVector3& to,
|
||||||
btCollisionWorld::RayResultCallback* resultCallback, btCollisionObject* collisionObject,btTriangleMeshShape* triangleMesh):
|
btCollisionWorld::RayResultCallback* resultCallback, btCollisionObject* collisionObject,btTriangleMeshShape* triangleMesh,const btTransform& colObjWorldTransform):
|
||||||
//@BP Mod
|
//@BP Mod
|
||||||
btTriangleRaycastCallback(from,to, resultCallback->m_flags),
|
btTriangleRaycastCallback(from,to, resultCallback->m_flags),
|
||||||
m_resultCallback(resultCallback),
|
m_resultCallback(resultCallback),
|
||||||
m_collisionObject(collisionObject),
|
m_collisionObject(collisionObject),
|
||||||
m_triangleMesh(triangleMesh)
|
m_triangleMesh(triangleMesh),
|
||||||
|
m_colObjWorldTransform(colObjWorldTransform)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -313,19 +316,21 @@ void btCollisionWorld::rayTestSingle(const btTransform& rayFromTrans,const btTra
|
|||||||
shapeInfo.m_shapePart = partId;
|
shapeInfo.m_shapePart = partId;
|
||||||
shapeInfo.m_triangleIndex = triangleIndex;
|
shapeInfo.m_triangleIndex = triangleIndex;
|
||||||
|
|
||||||
|
btVector3 hitNormalWorld = m_colObjWorldTransform.getBasis() * hitNormalLocal;
|
||||||
|
|
||||||
btCollisionWorld::LocalRayResult rayResult
|
btCollisionWorld::LocalRayResult rayResult
|
||||||
(m_collisionObject,
|
(m_collisionObject,
|
||||||
&shapeInfo,
|
&shapeInfo,
|
||||||
hitNormalLocal,
|
hitNormalWorld,
|
||||||
hitFraction);
|
hitFraction);
|
||||||
|
|
||||||
bool normalInWorldSpace = false;
|
bool normalInWorldSpace = true;
|
||||||
return m_resultCallback->addSingleResult(rayResult,normalInWorldSpace);
|
return m_resultCallback->addSingleResult(rayResult,normalInWorldSpace);
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
BridgeTriangleRaycastCallback rcb(rayFromLocal,rayToLocal,&resultCallback,collisionObject,triangleMesh);
|
BridgeTriangleRaycastCallback rcb(rayFromLocal,rayToLocal,&resultCallback,collisionObject,triangleMesh,colObjWorldTransform);
|
||||||
rcb.m_hitFraction = resultCallback.m_closestHitFraction;
|
rcb.m_hitFraction = resultCallback.m_closestHitFraction;
|
||||||
triangleMesh->performRaycast(&rcb,rayFromLocal,rayToLocal);
|
triangleMesh->performRaycast(&rcb,rayFromLocal,rayToLocal);
|
||||||
} else
|
} else
|
||||||
@@ -346,13 +351,16 @@ void btCollisionWorld::rayTestSingle(const btTransform& rayFromTrans,const btTra
|
|||||||
btCollisionObject* m_collisionObject;
|
btCollisionObject* m_collisionObject;
|
||||||
btConcaveShape* m_triangleMesh;
|
btConcaveShape* m_triangleMesh;
|
||||||
|
|
||||||
|
btTransform m_colObjWorldTransform;
|
||||||
|
|
||||||
BridgeTriangleRaycastCallback( const btVector3& from,const btVector3& to,
|
BridgeTriangleRaycastCallback( const btVector3& from,const btVector3& to,
|
||||||
btCollisionWorld::RayResultCallback* resultCallback, btCollisionObject* collisionObject,btConcaveShape* triangleMesh):
|
btCollisionWorld::RayResultCallback* resultCallback, btCollisionObject* collisionObject,btConcaveShape* triangleMesh, const btTransform& colObjWorldTransform):
|
||||||
//@BP Mod
|
//@BP Mod
|
||||||
btTriangleRaycastCallback(from,to, resultCallback->m_flags),
|
btTriangleRaycastCallback(from,to, resultCallback->m_flags),
|
||||||
m_resultCallback(resultCallback),
|
m_resultCallback(resultCallback),
|
||||||
m_collisionObject(collisionObject),
|
m_collisionObject(collisionObject),
|
||||||
m_triangleMesh(triangleMesh)
|
m_triangleMesh(triangleMesh),
|
||||||
|
m_colObjWorldTransform(colObjWorldTransform)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -363,22 +371,22 @@ void btCollisionWorld::rayTestSingle(const btTransform& rayFromTrans,const btTra
|
|||||||
shapeInfo.m_shapePart = partId;
|
shapeInfo.m_shapePart = partId;
|
||||||
shapeInfo.m_triangleIndex = triangleIndex;
|
shapeInfo.m_triangleIndex = triangleIndex;
|
||||||
|
|
||||||
|
btVector3 hitNormalWorld = m_colObjWorldTransform.getBasis() * hitNormalLocal;
|
||||||
|
|
||||||
btCollisionWorld::LocalRayResult rayResult
|
btCollisionWorld::LocalRayResult rayResult
|
||||||
(m_collisionObject,
|
(m_collisionObject,
|
||||||
&shapeInfo,
|
&shapeInfo,
|
||||||
hitNormalLocal,
|
hitNormalWorld,
|
||||||
hitFraction);
|
hitFraction);
|
||||||
|
|
||||||
bool normalInWorldSpace = false;
|
bool normalInWorldSpace = true;
|
||||||
return m_resultCallback->addSingleResult(rayResult,normalInWorldSpace);
|
return m_resultCallback->addSingleResult(rayResult,normalInWorldSpace);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
BridgeTriangleRaycastCallback rcb(rayFromLocal,rayToLocal,&resultCallback,collisionObject,concaveShape);
|
BridgeTriangleRaycastCallback rcb(rayFromLocal,rayToLocal,&resultCallback,collisionObject,concaveShape, colObjWorldTransform);
|
||||||
rcb.m_hitFraction = resultCallback.m_closestHitFraction;
|
rcb.m_hitFraction = resultCallback.m_closestHitFraction;
|
||||||
|
|
||||||
btVector3 rayAabbMinLocal = rayFromLocal;
|
btVector3 rayAabbMinLocal = rayFromLocal;
|
||||||
|
|||||||
@@ -77,6 +77,17 @@ public:
|
|||||||
return m_implicitShapeDimensions[m_upAxis];
|
return m_implicitShapeDimensions[m_upAxis];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virtual void setLocalScaling(const btVector3& scaling)
|
||||||
|
{
|
||||||
|
btVector3 oldMargin(getMargin(),getMargin(),getMargin());
|
||||||
|
btVector3 implicitShapeDimensionsWithMargin = m_implicitShapeDimensions+oldMargin;
|
||||||
|
btVector3 unScaledImplicitShapeDimensionsWithMargin = implicitShapeDimensionsWithMargin / m_localScaling;
|
||||||
|
|
||||||
|
btConvexInternalShape::setLocalScaling(scaling);
|
||||||
|
|
||||||
|
m_implicitShapeDimensions = (unScaledImplicitShapeDimensionsWithMargin * m_localScaling) - oldMargin;
|
||||||
|
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
///btCapsuleShapeX represents a capsule around the Z axis
|
///btCapsuleShapeX represents a capsule around the Z axis
|
||||||
|
|||||||
Reference in New Issue
Block a user