예제 #1
0
void RigidBody::Update(f32 dt)
{
    PhysicsPlayground& playground = SystemLocator::GetInstance()->RequestSystem<PhysicsPlayground>("PhysicsPlayground");

    //Add gravity to force accumulator
    if(playground.IsGravityEnabled())
    {
        m_ForceAccumulator += playground.GetAcceleratedGravity();
    }

    XCVec4 currentAcceleration = m_Acceleration;

    //Update the position
    m_position += (m_velocity * dt);

    //Update the Resulting Acceleration
    currentAcceleration += m_ForceAccumulator * m_inverseMass;

    //Update linear Velocity
    m_velocity += currentAcceleration * dt;

    //Impose Draging force
    m_velocity *= (f32)pow(m_damping, dt);

    ClearForce();

    //Update the bound volume
    m_physicsBoundVolume->Transform(m_position, m_orientation);
}
예제 #2
0
void Body::Simulate(real dt)
{
	m_acceleration = m_force * m_inverseMass;
	m_velocity += m_acceleration;
	m_position += m_velocity;
	ClearForce();
}
예제 #3
0
void RigidBody::ClearForce()
{
    ClearForce(ForceMode::Force, true);
}