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


C++ Physics::addSystemThreadListener方法代码示例

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


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

示例1: initialize

bool CursorSpringConnector::initialize() {

	OopsObjectID cursorRigidBodyID;
	OopsObjectID cursorJointID;
	SimplePhysicsEntity* simpleEntity;
	ArticulatedPhysicsEntity* articulatedEntity;
	TransformationData cursorTrans, rigidBodyTrans;

	simpleEntity = dynamic_cast<SimplePhysicsEntity*>(entity);
	articulatedEntity = dynamic_cast<ArticulatedPhysicsEntity*>(entity);

	if (simpleEntity)
		rigidBody = simpleEntity->rigidBody;
	else if (articulatedEntity)
		rigidBody = articulatedEntity->articulatedBody->getMainBody();
	else
	{
		printd(ERROR, "CursorSpringConnector::initialize(): unsupported PhysicsEntity-ClassType found!\n");
		return false;
	} // else

	rigidBodyId = rigidBody->getID();

	// Access to cursorTransformation does not have to be locked yet until we
	// did not register as SystemThreadListener

	// cursorToBodyOffset = cursorTrans^(-1) * rigidBodyTrans
	cursorTrans = cursorTransformation;
	rigidBodyTrans = rigidBody->getTransformation();
	invert(cursorTrans);
	multiply(cursorToBodyOffset, cursorTrans, rigidBodyTrans);

	// rigidBodyTrans * bodyToCursorOffset = cursorTrans
	// bodyToCursorOffset = rigidBodyTrans^(-1) * cursorTrans
	cursorTrans = cursorTransformation;
	invert(rigidBodyTrans);
	multiply(bodyToCursorOffset, rigidBodyTrans, cursorTrans);

	oldCursorTransformation.position = cursorTrans.position;
	oldCursorTransformation.orientation = cursorTrans.orientation;

	Physics* physicsModule = ((Physics*)SystemCore::getModuleByName("Physics"));
	physicsModule->addSimulationStepListener(this);
	physicsModule->addSystemThreadListener(this);

	if (connectionMode == JOINT_MODE)
	{
		cursorBody = new oops::RigidBody(NULL);
		cursorBody->setGravityMode(false);
		cursorBody->setMass(std::numeric_limits<float>::max());
		cursorBody->setTransformation(cursorTrans);
		cursorRigidBodyID = OopsObjectID(false, CURSORSPRINGCONNECTOR_CLASSID, 0, user->getId());
		cursorBody->setID(cursorRigidBodyID.get());

		cursorJointID = OopsObjectID(true, CURSORSPRINGCONNECTOR_CLASSID, 0, user->getId());
		connectionJoint = new oops::SpringDamperJoint(cursorJointID.get(), cursorBody, rigidBody);
		connectionJoint->setLinearConstants(linearSpringConstant, linearDampingConstant);
		connectionJoint->setAngularConstants(angularSpringConstant, angularDampingConstant);
	} // if

	return true;
}
开发者ID:flair2005,项目名称:inVRs,代码行数:62,代码来源:CursorSpringConnector.cpp


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