HavokLevel

3D Åø( 3DSMAX, ¸¶¾ßµî )¿¡¼­ ÀͽºÆ÷Æ®ÇÑ ÇϺ¹ Æ÷¸ËÀÇ *.hkx¸¦ Á¤ÀûÀÎ ¹è°æ µ¥ÀÌÅÍ·Î ·ÎµùÇØ º¸ÀÚ.
µ¥ÀÌÅÍÀÇ È®ÀÎÀº ºñÁê¾ó µð¹ö°Å·Î¸¸ È®ÀÎ ÇÒ ¼ö ÀÖ´Ù.

°¡Àå Å« ¹Ú½º°¡ "ground.hkx" ÆÄÀÏÀÌ´Ù.
¿ÞÂÊ µÎ °³ÀÇ Áß°£ Å©±â ¹Ú½º´Â MakeStaticBox( )¿¡ ÀÇÇØ ¸¸µé¾îÁø Ãæµ¹ ¸Þ½¬ÀÌ´Ù.

hkx ÆÄÀÏÀ̳ª ÇϺ¹À¸·Î ÀͽºÆ÷Æ®µÈ ÆÄÀÏÀ» ·ÎµùÇϱâ À§Çؼ­´Â hkLoaderÀÇ °´Ã¼¸¦ »ý¼ºÇÑ´Ù.
HavokManager¿¡¼­ »ý¼ºÈÄ HavokLevel·Î Àü´ÞÇÑ´Ù.

ÆÄÀÏ ·ÎµùÈÄ hkpWorld¿¡ Ãß°¡ÇÏ´Â ¹æ¹ýÀº addEntity( )·Î Ãß°¡ ÇÏ´Â ¹æ¹ý°ú addPhysicsSystem( )·Î Ãß°¡ÇÏ´Â ¹æ¹ýÀÌ ÀÖ´Ù. HavokLevel¿¡¼­´Â °¢°¢ AddWorld( ), AddPhysicsSystem( ) ¸Þ¼Òµå¸¦ Á¦°øÇÑ´Ù.

< hkpWorld::addEntity( ) >

hkpRigidBody* HavokLevel::AddWorld( const  char* fileName )

{

    hkLoader* loader = HavokManager::Instance()->GetLoader();

    hkRootLevelContainer* container = loader->load( fileName );

    if( !container )

    {

        throw  std::runtime_error("Can't load collision mesh ");

    }

 

    HK_ASSERT2(0xaefe9356, container != HK_NULL , "Could not load asset");

    hkpPhysicsData* physics = static_cast<hkpPhysicsData*>( container->findObjectByType( hkpPhysicsDataClass.getName() ) );

    HK_ASSERT2(0x245982ae, physics != HK_NULL, "Could not find physics data in root level object" );

 

    hkpRigidBody* pRigidBody = physics->getPhysicsSystems()[0]->getRigidBodies()[0];

    pRigidBody->setPosition(hkVector4(90,0,0));

 

    hkpWorld* pWorld = HavokManager::Instance()->GetWorld();

    pWorld->markForWrite();

    pWorld->addEntity(pRigidBody);

    pRigidBody->removeReference();

    pWorld->unmarkForWrite();

    return  pRigidBody;

}

hkLoader·Î ÆÄÀÏ ·ÎµùÈÄ hkpWorldÀÇ addEntity( )·Î Ãß°¡ÇÑ´Ù.

< hkpWorld::AddPhysicsSystem( ) >

hkpPhysicsData* HavokLevel::AddPhysicsSystem( const  char* fileName )

{

    hkLoader* loader = HavokManager::Instance()->GetLoader();

    hkRootLevelContainer* container = loader->load( fileName );

    if( !container )

    {

        throw  std::runtime_error("Can't load collision mesh ");

    }

 

    HK_ASSERT2(0xaefe9356, container != HK_NULL , "Could not load asset");

    hkpPhysicsData* physics = static_cast<hkpPhysicsData*>( container->findObjectByType( hkpPhysicsDataClass.getName() ) );

    HK_ASSERT2(0x245982ae, physics != HK_NULL, "Could not find physics data in root level object" );

 

    hkpWorld* pWorld = HavokManager::Instance()->GetWorld();

    pWorld->lock();

 

    // Add all the physics systems to the world

    for ( int  i = 0; i < physics->getPhysicsSystems().getSize(); ++i )

    {

        pWorld->addPhysicsSystem( physics->getPhysicsSystems()[i] );

    }

 

    pWorld->unlock();

    return  physics;

}

hkLoader·Î ÆÄÀÏ ·ÎµùÈÄ hkpWorldÀÇ AddPhysicsSystem( )·Î Ãß°¡ÇÑ´Ù.

ÇÁ·ÎÁ§Æ® : havok_level.zip