//----------------------------------------------------------------------------
void BouncingTetrahedra::PhysicsTick ()
{
    DoCollisionDetection();
    DoCollisionResponse();

    mTotalKE = 0.0f;
    for (int i = 0; i < NUM_TETRA; ++i)
    {
        const RigidTetra& tetra = *mTetras[i];
        float invMass = tetra.GetInverseMass();
        const Matrix3f& inertia = tetra.GetWorldInertia();
        const Vector3f& position = tetra.GetPosition();
        const Vector3f& linearMomentum = tetra.GetLinearMomentum();
        const Matrix3f& rotOrient = tetra.GetROrientation();
        const Vector3f& angularVelocity = tetra.GetAngularVelocity();

        mTetraNodes[i]->LocalTransform.SetTranslate(position);
        mTetraNodes[i]->LocalTransform.SetRotate(rotOrient);

        mTotalKE += invMass*linearMomentum.Dot(linearMomentum) +
            angularVelocity.Dot(inertia*angularVelocity);
    }
    mTotalKE *= 0.5f;

    mScene->Update();
    mSimTime += mSimDeltaTime;
}
Пример #2
0
//----------------------------------------------------------------------------
void BouncingSpheres::PhysicsTick ()
{
    DoCollisionDetection();
    DoCollisionResponse();

    for (int i = 0; i < NUM_BALLS; ++i)
    {
        mBallNodes[i]->LocalTransform.SetTranslate(mBalls[i]->GetPosition());
    }

    mScene->Update();

    mSimTime += mSimDeltaTime;
}
Пример #3
0
void World::DoPhysical(TimeSpan time, TimeSpan timeDelta)
{
    
    // DoMotion
   /* ball_.Update(time, timeDelta);
    for(uint i = 0; i < pins_.size(); ++i)
    {
        pins_[i].Update(time, timeDelta);
    }*/
    
    DoCollisionDetection();
    DoCollisionResponse();
    
    ball_.Update(time, timeDelta);
    for(uint i = 0; i < pins_.size(); ++i)
    {
        pins_[i].Update(time, timeDelta);
    }
    // * ÀÏ´Ü Pin0 ºÎÅÍ Å×½ºÆ®. ¿Ö ȸÀüÀÌ ¾ÈµÇ´ÂÁö.
    //pins_[0].Update(time, timeDelta);

    totalKE_ = 0.0f;

    totalKE_ += CalcKE(ball_.GetRigidBody());
    for (uint i = 0; i < pins_.size(); i++)
    {
        totalKE_ += CalcKE(pins_[i].GetRigidBody());
    }
    totalKE_ *= 0.5f;

    //// update the scene graph
    //m_spkScene->UpdateGS(0.0f);

    //// next simulation time: see DoMotion for calculation of m_fSimDelta
    //m_fSimTime += m_fSimDelta;
}