Applied patch for character controller by bjorn.wesen. Fixes Issue 644.

Fixed some warnings in double-precision compile
This commit is contained in:
erwin.coumans
2012-09-11 04:36:57 +00:00
parent d99d9779a2
commit 4eb5240cbe
4 changed files with 27 additions and 13 deletions

View File

@@ -123,11 +123,11 @@ SIMD_FORCE_INLINE int btTriangleInfoMap::calculateSerializeBufferSize() const
SIMD_FORCE_INLINE const char* btTriangleInfoMap::serialize(void* dataBuffer, btSerializer* serializer) const SIMD_FORCE_INLINE const char* btTriangleInfoMap::serialize(void* dataBuffer, btSerializer* serializer) const
{ {
btTriangleInfoMapData* tmapData = (btTriangleInfoMapData*) dataBuffer; btTriangleInfoMapData* tmapData = (btTriangleInfoMapData*) dataBuffer;
tmapData->m_convexEpsilon = m_convexEpsilon; tmapData->m_convexEpsilon = (float)m_convexEpsilon;
tmapData->m_planarEpsilon = m_planarEpsilon; tmapData->m_planarEpsilon = (float)m_planarEpsilon;
tmapData->m_equalVertexThreshold = m_equalVertexThreshold; tmapData->m_equalVertexThreshold =(float) m_equalVertexThreshold;
tmapData->m_edgeDistanceThreshold = m_edgeDistanceThreshold; tmapData->m_edgeDistanceThreshold = (float)m_edgeDistanceThreshold;
tmapData->m_zeroAreaThreshold = m_zeroAreaThreshold; tmapData->m_zeroAreaThreshold = (float)m_zeroAreaThreshold;
tmapData->m_hashTableSize = m_hashTable.size(); tmapData->m_hashTableSize = m_hashTable.size();
@@ -172,9 +172,9 @@ SIMD_FORCE_INLINE const char* btTriangleInfoMap::serialize(void* dataBuffer, btS
btTriangleInfoData* memPtr = (btTriangleInfoData*)chunk->m_oldPtr; btTriangleInfoData* memPtr = (btTriangleInfoData*)chunk->m_oldPtr;
for (int i=0;i<numElem;i++,memPtr++) for (int i=0;i<numElem;i++,memPtr++)
{ {
memPtr->m_edgeV0V1Angle = m_valueArray[i].m_edgeV0V1Angle; memPtr->m_edgeV0V1Angle = (float)m_valueArray[i].m_edgeV0V1Angle;
memPtr->m_edgeV1V2Angle = m_valueArray[i].m_edgeV1V2Angle; memPtr->m_edgeV1V2Angle = (float)m_valueArray[i].m_edgeV1V2Angle;
memPtr->m_edgeV2V0Angle = m_valueArray[i].m_edgeV2V0Angle; memPtr->m_edgeV2V0Angle = (float)m_valueArray[i].m_edgeV2V0Angle;
memPtr->m_flags = m_valueArray[i].m_flags; memPtr->m_flags = m_valueArray[i].m_flags;
} }
serializer->finalizeChunk(chunk,"btTriangleInfoData",BT_ARRAY_CODE,(void*) &m_valueArray[0]); serializer->finalizeChunk(chunk,"btTriangleInfoData",BT_ARRAY_CODE,(void*) &m_valueArray[0]);

View File

@@ -160,6 +160,20 @@ btPairCachingGhostObject* btKinematicCharacterController::getGhostObject()
bool btKinematicCharacterController::recoverFromPenetration ( btCollisionWorld* collisionWorld) bool btKinematicCharacterController::recoverFromPenetration ( btCollisionWorld* collisionWorld)
{ {
// Here we must refresh the overlapping paircache as the penetrating movement itself or the
// previous recovery iteration might have used setWorldTransform and pushed us into an object
// that is not in the previous cache contents from the last timestep, as will happen if we
// are pushed into a new AABB overlap. Unhandled this means the next convex sweep gets stuck.
//
// Do this by calling the broadphase's setAabb with the moved AABB, this will update the broadphase
// paircache and the ghostobject's internal paircache at the same time. /BW
btVector3 minAabb, maxAabb;
m_convexShape->getAabb(m_ghostObject->getWorldTransform(), minAabb,maxAabb);
collisionWorld->getBroadphase()->setAabb(m_ghostObject->getBroadphaseHandle(),
minAabb,
maxAabb,
collisionWorld->getDispatcher());
bool penetration = false; bool penetration = false;

View File

@@ -90,10 +90,10 @@ SIMD_FORCE_INLINE const char* btGeneric6DofSpringConstraint::serialize(void* dat
int i; int i;
for (i=0;i<6;i++) for (i=0;i<6;i++)
{ {
dof->m_equilibriumPoint[i] = m_equilibriumPoint[i]; dof->m_equilibriumPoint[i] = (float)m_equilibriumPoint[i];
dof->m_springDamping[i] = m_springDamping[i]; dof->m_springDamping[i] = (float)m_springDamping[i];
dof->m_springEnabled[i] = m_springEnabled[i]? 1 : 0; dof->m_springEnabled[i] = m_springEnabled[i]? 1 : 0;
dof->m_springStiffness[i] = m_springStiffness[i]; dof->m_springStiffness[i] = (float)m_springStiffness[i];
} }
return "btGeneric6DofSpringConstraintData"; return "btGeneric6DofSpringConstraintData";
} }

View File

@@ -37,7 +37,7 @@
inline Vectormath::Aos::Vector3 getVmVector3(const btVector3& bulletVec) inline Vectormath::Aos::Vector3 getVmVector3(const btVector3& bulletVec)
{ {
return Vectormath::Aos::Vector3(bulletVec.getX(),bulletVec.getY(),bulletVec.getZ()); return Vectormath::Aos::Vector3((float)bulletVec.getX(),(float)bulletVec.getY(),(float)bulletVec.getZ());
} }
inline btVector3 getBtVector3(const Vectormath::Aos::Vector3& vmVec) inline btVector3 getBtVector3(const Vectormath::Aos::Vector3& vmVec)
@@ -51,7 +51,7 @@ inline btVector3 getBtVector3(const Vectormath::Aos::Point3& vmVec)
inline Vectormath::Aos::Quat getVmQuat(const btQuaternion& bulletQuat) inline Vectormath::Aos::Quat getVmQuat(const btQuaternion& bulletQuat)
{ {
Vectormath::Aos::Quat vmQuat(bulletQuat.getX(),bulletQuat.getY(),bulletQuat.getZ(),bulletQuat.getW()); Vectormath::Aos::Quat vmQuat((float)bulletQuat.getX(),(float)bulletQuat.getY(),(float)bulletQuat.getZ(),(float)bulletQuat.getW());
return vmQuat; return vmQuat;
} }