本文整理汇总了C++中PhysicsBody::Init方法的典型用法代码示例。如果您正苦于以下问题:C++ PhysicsBody::Init方法的具体用法?C++ PhysicsBody::Init怎么用?C++ PhysicsBody::Init使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类PhysicsBody
的用法示例。
在下文中一共展示了PhysicsBody::Init方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: CreatePhysicsBody
PhysicsBody* PhysicsManager::CreatePhysicsBody(Entity* entity, PHYSICS_BODY_TYPE type, COLLIDER_TYPE colliderType, Vector3 position, float mass)
{
PhysicsBody* body;
switch(type)
{
case PARTICLE:
body = new Particle(mass);
break;
case RIGID_BODY:
body = new RigidBody(mass);
break;
default:
return NULL;
break;
}
Collider* collider;
SphereCollider* tempSphere;
PlaneCollider* tempPlane;
BoxCollider* tempBox;
Matrix inertiaTensor;
float massFactor = 0;
switch(colliderType)
{
case SPHERE:
tempSphere = new SphereCollider();
tempSphere->Radius = .5f;
collider = tempSphere;
massFactor = (2.0f / 5.0f) * mass;
inertiaTensor.SetRow(1,massFactor * (.5f * .5f),0 ,0 ,0);
inertiaTensor.SetRow(2,0 ,massFactor * (.5f * .5f),0 ,0);
inertiaTensor.SetRow(3,0 ,0 ,massFactor * (.5f * .5f),0);
inertiaTensor.SetRow(4,0 ,0 ,0 ,1);
break;
case PLANE:
tempPlane = new PlaneCollider();
tempPlane->Normal = Vector3(0,1,0);
tempPlane->PlaneOffset = 0;
collider = tempPlane;
break;
case BOX:
tempBox = new BoxCollider();
tempBox->halfSize = Vector3(.5f, .5f, .5f);
collider = tempBox;
massFactor = (1.0f / 12.0f) * mass;
inertiaTensor.SetRow(1,massFactor * (1 + 1),0 ,0 ,0);
inertiaTensor.SetRow(2,0 ,massFactor * (1 + 1),0 ,0);
inertiaTensor.SetRow(3,0 ,0 ,massFactor * (1 + 1),0);
inertiaTensor.SetRow(4,0 ,0 ,0 ,1);
break;
}
body->Init(entity, collider);
body->SetPosition(position);
entity->SetPhysicsBody(body);
entity->GetTransform()->SetPosition(position);
mObjectsTracked.push_back(body);
return body;
}