Assertion failed in convexSweeptest

gus
Posts: 3
Joined: Sun Apr 22, 2007 4:57 pm

Assertion failed in convexSweeptest

Post by gus »

Hello,

i have a problem with bullet. I have a basic (copied passed from the forum) character controler, but when it's hitting something, i get an assertion failed. Here is the call stack:
msvcr100d.dll!_NMSG_WRITE(int rterrnum) Ligne 217 C
msvcr100d.dll!abort() Ligne 61 + 0x7 octets C
msvcr100d.dll!_wassert(const wchar_t * expr, const wchar_t * filename, unsigned int lineno) Ligne 153 C
> openmw.exe!btCollisionWorld::ClosestConvexResultCallback::addSingleResult(btCollisionWorld::LocalConvexResult & convexResult, bool normalInWorldSpace) Ligne 345 + 0x2c octets C++
openmw.exe!btKinematicClosestNotMeConvexResultCallback::addSingleResult(btCollisionWorld::LocalConvexResult & convexResult, bool normalInWorldSpace) Ligne 91 C++
openmw.exe!`btCollisionWorld::objectQuerySingle'::`33'::LocalInfoAdder::addSingleResult(btCollisionWorld::LocalConvexResult & r, bool b) Ligne 671 + 0x1e octets C++
openmw.exe!`btCollisionWorld::objectQuerySingle'::`22'::BridgeTriangleConvexcastCallback::reportHit(const btVector3 & hitNormalLocal, const btVector3 & hitPointLocal, float hitFraction, int partId, int triangleIndex) Ligne 567 + 0x24 octets C++
openmw.exe!btTriangleConvexcastCallback::processTriangle(btVector3 * triangle, int partId, int triangleIndex) Ligne 171 + 0x2f octets C++
openmw.exe!`btBvhTriangleMeshShape::performConvexcast'::`2'::MyNodeOverlapCallback::processNode(int nodeSubPart, int nodeTriangleIndex) Ligne 221 + 0x21 octets C++
openmw.exe!btQuantizedBvh::walkStacklessQuantizedTreeAgainstRay(btNodeOverlapCallback * nodeCallback, const btVector3 & raySource, const btVector3 & rayTarget, const btVector3 & aabbMin, const btVector3 & aabbMax, int startNodeIndex, int endNodeIndex) Ligne 647 + 0x21 octets C++
openmw.exe!btQuantizedBvh::reportBoxCastOverlappingNodex(btNodeOverlapCallback * nodeCallback, const btVector3 & raySource, const btVector3 & rayTarget, const btVector3 & aabbMin, const btVector3 & aabbMax) Ligne 770 C++
openmw.exe!btBvhTriangleMeshShape::performConvexcast(btTriangleCallback * callback, const btVector3 & raySource, const btVector3 & rayTarget, const btVector3 & aabbMin, const btVector3 & aabbMax) Ligne 229 C++
openmw.exe!btCollisionWorld::objectQuerySingle(const btConvexShape * castShape, const btTransform & convexFromTrans, const btTransform & convexToTrans, btCollisionObject * collisionObject, const btCollisionShape * collisionShape, const btTransform & colObjWorldTransform, btCollisionWorld::ConvexResultCallback & resultCallback, float allowedPenetration) Ligne 579 C++
openmw.exe!btCollisionWorld::objectQuerySingle(const btConvexShape * castShape, const btTransform & convexFromTrans, const btTransform & convexToTrans, btCollisionObject * collisionObject, const btCollisionShape * collisionShape, const btTransform & colObjWorldTransform, btCollisionWorld::ConvexResultCallback & resultCallback, float allowedPenetration) Ligne 682 + 0x31 octets C++
openmw.exe!btSingleSweepCallback::process(const btBroadphaseProxy * proxy) Ligne 839 + 0x4a octets C++
openmw.exe!BroadphaseRayTester::Process(const btDbvtNode * leaf) Ligne 223 + 0x19 octets C++
openmw.exe!btDbvt::rayTestInternal<BroadphaseRayTester>(const btDbvtNode * root, const btVector3 & rayFrom, const btVector3 & rayTo, const btVector3 & rayDirectionInverse, unsigned int * signs, float lambda_max, const btVector3 & aabbMin, const btVector3 & aabbMax, BroadphaseRayTester & policy) Ligne 987 C++
openmw.exe!btDbvtBroadphase::rayTest(const btVector3 & rayFrom, const btVector3 & rayTo, btBroadphaseRayCallback & rayCallback, const btVector3 & aabbMin, const btVector3 & aabbMax) Ligne 249 C++
openmw.exe!btCollisionWorld::convexSweepTest(const btConvexShape * castShape, const btTransform & convexFromWorld, const btTransform & convexToWorld, btCollisionWorld::ConvexResultCallback & resultCallback, float allowedCcdPenetration) Ligne 878 + 0x3f octets C++
openmw.exe!btKinematicCharacterController::stepForwardAndStrafe(btCollisionWorld * collisionWorld, const btVector3 & currentPosition, const btVector3 & walkMove) Ligne 361 C++
openmw.exe!btKinematicCharacterController::playerStep(btCollisionWorld * collisionWorld, float dt) Ligne 517 + 0x1b octets C++
openmw.exe!btKinematicCharacterController::updateAction(btCollisionWorld * collisionWorld, float deltaTime) Ligne 109 + 0x1a octets C++
openmw.exe!btDiscreteDynamicsWorld::updateActions(float timeStep) Ligne 437 + 0x31 octets C++
openmw.exe!btDiscreteDynamicsWorld::internalSingleStepSimulation(float timeStep) Ligne 338 C++
openmw.exe!btDiscreteDynamicsWorld::stepSimulation(float timeStep, int maxSubSteps, float fixedTimeStep) Ligne 281 +
And to be more precise, the error happens at line 345 of btCollisionWorld:

Code: Select all

		virtual	btScalar	addSingleResult(LocalConvexResult& convexResult,bool normalInWorldSpace)
		{
//caller already does the filter on the m_closestHitFraction
			ERROR HERE:btAssert(convexResult.m_hitFraction <= m_closestHitFraction);
						
			m_closestHitFraction = convexResult.m_hitFraction;
			m_hitCollisionObject = convexResult.m_hitCollisionObject;
			if (normalInWorldSpace)
			{
				m_hitNormalWorld = convexResult.m_hitNormalLocal;
			} else
			{
				///need to transform normal into worldspace
				m_hitNormalWorld = m_hitCollisionObject->getWorldTransform().getBasis()*convexResult.m_hitNormalLocal;
			}
			m_hitPointWorld = convexResult.m_hitPointLocal;
			return convexResult.m_hitFraction;
		}
	};
This crash also only occur in debug mode. In release mode, it's OK.
Is it something normal? Does anyone have any idea of what could cause this crash?

Thanks!