当前位置: 首页>>代码示例>>C++>>正文


C++ btTransform::invXform方法代码示例

本文整理汇总了C++中btTransform::invXform方法的典型用法代码示例。如果您正苦于以下问题:C++ btTransform::invXform方法的具体用法?C++ btTransform::invXform怎么用?C++ btTransform::invXform使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在btTransform的用法示例。


在下文中一共展示了btTransform::invXform方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: ManifoldResultAddContactPoint

 ///return true if it requires a dma transfer back
bool ManifoldResultAddContactPoint(const btVector3& normalOnBInWorld,
								   const btVector3& pointInWorld,
								   float depth,
								   btPersistentManifold* manifoldPtr,
								   btTransform& transA,
								   btTransform& transB,
									btScalar	combinedFriction,
									btScalar	combinedRestitution,
								   bool isSwapped)
{
	
//	float contactTreshold = manifoldPtr->getContactBreakingThreshold();

	//spu_printf("SPU: add contactpoint, depth:%f, contactTreshold %f, manifoldPtr %llx\n",depth,contactTreshold,manifoldPtr);

#ifdef DEBUG_SPU_COLLISION_DETECTION
	spu_printf("SPU: contactTreshold %f\n",contactTreshold);
#endif //DEBUG_SPU_COLLISION_DETECTION
	//if (depth > manifoldPtr->getContactBreakingThreshold())
	//	return false;

	if (depth > manifoldPtr->getContactProcessingThreshold())
		return false;



	btVector3 pointA;
	btVector3 localA;
	btVector3 localB;
	btVector3 normal;


	if (isSwapped)
	{
		normal = normalOnBInWorld * -1;
		pointA = pointInWorld + normal * depth;
		localA = transA.invXform(pointA );
		localB = transB.invXform(pointInWorld);
	}
	else
	{
		normal = normalOnBInWorld;
		pointA = pointInWorld + normal * depth;
		localA = transA.invXform(pointA );
		localB = transB.invXform(pointInWorld);
	}

	btManifoldPoint newPt(localA,localB,normal,depth);
	newPt.m_positionWorldOnA = pointA;
	newPt.m_positionWorldOnB = pointInWorld;

	newPt.m_combinedFriction = combinedFriction;
	newPt.m_combinedRestitution = combinedRestitution;


	int insertIndex = manifoldPtr->getCacheEntry(newPt);
	if (insertIndex >= 0)
	{
		// we need to replace the current contact point, otherwise small errors will accumulate (spheres start rolling etc)
		manifoldPtr->replaceContactPoint(newPt,insertIndex);
		return true;
		
	} else
	{

		/*
		///@todo: SPU callbacks, either immediate (local on the SPU), or deferred
		//User can override friction and/or restitution
		if (gContactAddedCallback &&
			//and if either of the two bodies requires custom material
			 ((m_body0->m_collisionFlags & btCollisionObject::customMaterialCallback) ||
			   (m_body1->m_collisionFlags & btCollisionObject::customMaterialCallback)))
		{
			//experimental feature info, for per-triangle material etc.
			(*gContactAddedCallback)(newPt,m_body0,m_partId0,m_index0,m_body1,m_partId1,m_index1);
		}
		*/

		manifoldPtr->addManifoldPoint(newPt);
		return true;

	}
	return false;
	
}
开发者ID:Mashewnutz,项目名称:Slo,代码行数:86,代码来源:SpuContactResult.cpp


注:本文中的btTransform::invXform方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。