hkpSphereShape hkContactPoint

¾Æ·¡ À̹ÌÁö´Â º®À» °øÀ» ƨ°ÜÁÖ´Â À̹ÌÁö´Ù.

½ÇÇà ¹æ¹ýÀ» ¼³¸í ÇÏÀÚ¸é 1À» ´©¸£¸é °øÀÌ ¹Ù´Ú¿¡ Ãæµ¹ ÇÒ‹š ¸ØÃá´Ù. ´Ù½Ã 1À» ´©¸£¸é °øÀÌ ¹Ù´Ú¿¡ Ãæµ¹½Ã ¸ØÃß±â ¾Ê°í °è¼Ó ±¼·¯°£´Ù.
"Enter" Å°¸¦ ´©¸£¸é °øÀÌ Ãʱâ À§Ä¡¿¡¼­ ´Ù½Ã ¹ß»çÇÑ´Ù. ¼Óµµµµ »¡¶ó¼­ Æ÷¹°¼±À» ±×¸®¸é¼­ ³¯¶ó°¡´Â °ÍÀÌ ¾Æ´Ï¶ó °ÅÀÇ Á÷¼±¿¡ °¡±õ°Ô ³¯¶ó°£´Ù.

ÇϺ¹½ÄÀ¸·Î ¼³¸íÇÏÀÚ¸é hkpSphereShape·Î Ãæµ¹ ¸Þ½¬¸¦ ¸¸µé¾î °øÀÌ ³¯¶ó°¡´Â Áß¿¡ Ãæµ¹ÇÒ ¶§  hkContactPoint¸¦ ±¸ÇÑ´Ù. º®ÀÌ ¾Æ´Ï¶ó ¹Ù´Ú°ú Ãæµ¹ÇÏ´ÂÁö üũÇÑ´Ù.
hkpSphereShap ŸÀÔÀÇ hkpRigidBody´Â AddDynamicShere( )¿¡¼­ ¸¸µç´Ù.

¹ß»çü°¡ źȯ ºñ½ÁÇѰŶó hkpRigidBodyCinfo::m_qualityTypeÀ» HK_COLLIDABLE_QUALITY_BULLET·Î ¼³Á¤ÇÏ¸é ¹è°æ ¸Þ½¬¿Í Ãæµ¹½Ã CheckContactPoint( )¿¡¼­ hkContactPoint¸¦  ±¸ÇÒ ¼ö ¾ø´Ù.

ÀÌÀ¯´Â ¾Ë¼ö ¾ø´Ù. ±×·¡¼­ hkContactPoint¸¦ ¹Ù·Î ±¸Çϱâ À§ÇØ µðÆúÆ® qualityTypeÀ» »ç¿ëÇÑ´Ù.

    //info.m_qualityType = HK_COLLIDABLE_QUALITY_BULLET;

< °ø ¸ØÃß±â >

UpdateHavok( ) ÇÔ¼ö ¿¡¼­ °øÀÌ ¹Ù´Ú°ú Ãæµ¹ Çϸ頰øÀ» ¸ØÃßÀÚ.
Y-UP ÁÂÇ¥¶ó IsCheckWall(  )½Ã¿¡ ¹Ù´Ú°ú Ãæµ¹ ÇÏ´ÂÁö üũÇϱâ À§ÇØ (0, -1, 0 ) º¤ÅÍ¿Í ÀÏÄ¡ ÇÏ¸é °øÀ» ¸ØÃá´Ù.

void  UpdateHavok( hkVector4& pos, hkVector4& t )

{

    g_hkWorld->stepDeltaTime(1.0f/60.0f);

 

    if( g_sphereBody )

    {

        CheckContactPoint( g_sphereBody, g_wallPoint );

 

        //hkVector4 vel = g_sphereBody->getLinearVelocity();

        hkVector4 dir = hkVector4( 0, -1, 0 );

        if( IsCheckWall( dir, g_wallPoint ) )

        {

            OutputDebugPrintf( "°ø ¸ØÃß±â\" );

            if( g_bStopBall )

                StopBall( g_hkWorld );

        }

 

    }

}

°øÀ» ¸ØÃß±â À§ÇØ hkpRigidBodyÀÇ ¼Óµµ( LinearVelocity ), Áú·®( Mass )¸¦ 0À¸·Î ¸¸µç´Ù.
Àß µÉ±î???  ¾ÈµÈ´Ù.. Mass¸¦ 0À¸·Î ¼ÂÆà Çϸé ÀÌ·¯¸é ¾ÈµÈ´Ù°í Assert( )¸¦ ÅäÇØ ³½´Ù.
0ÀÌ ¾Æ´Ï¸é Assert°¡ ¾È¶°´Âµ¥ 0¸¸ ³ÖÀ¸¸é Assert°¡ ¶á´Ù.

³²Àº°Ç MotionType¹Û¿¡ ¾ø´Ù.

MotionTypeÀ» hkpMotion::MOTION_FIXEDÀ¸·Î ¼³Á¤ ÇÏ´Ï °øÀÌ ¹Ù´Ú¿¡ Ãæµ¹ÇÒ ¶§ ¹Ù·Î ¸ØÃá´Ù.
°øÀÌ ¹Ù´Ú¿¡ 3¹ø Á¤µµ ƨ±â°í ³ª¼­ ¸ØÃâ·Á¸é, ÇϺ¹ ¹°¸® ÀÌ¿ÜÀÇ º°µµÀÇ ·ÎÁ÷ ¾Ë°í¸®Áò Ãß°¡ ÇØ¾ß ÇÒ °ÍÀÌ´Ù.

void  StopBall( hkpWorld* pWorld )

{

    pWorld->lock();

 

    g_sphereBody->setLinearVelocity( hkVector4( 0, 0 ,0 ) );

    g_sphereBody->setMotionType( hkpMotion::MOTION_FIXED );

    //½ÇÇàÁß¿¡ Mass °ªÀ» 0À¸·Î Çϸé Á״´Ù.. ´Ù¸¥°ªÀº ÀÌ»ó¾øÀ½

    //g_sphereBody->setMass( 0.0f );

 

    pWorld->unlock();

}

< hkArray ¿¡·¯¾øÀÌ ÇØÁ¦Çϱâ >

hkArray·Î »ý¼ºÇÑ µ¥ÀÌÅÍ´Â std::vectoró·³ clear( ) ¸Þ¼Òµå·Î ÇìÁ¦ÇÏ¸é ´ÙÀ½ÀÇ Assert ´ëÈ­ »óÀÚ°¡ ¶ã°ÍÀÌ´Ù.

Debug Error!
R6025
    - pure virtual function call

hkArrayÀÇ ÃÖÁ¾ÀûÀ¸·Î ÇØÁ¦½Ã¿¡´Â clearAndDeallocate( )·Î ÇØÁ¦ÇØ¾ß ¹®Á¦°¡ ¾ø´Ù.
ÇÁ·Î±×·¥ Áß°£¿¡´Â clear( )·Î ÇØÁ¦ÇÑ´Ù.

ÇÁ·ÎÁ§Æ®:
havok_stopBall.zip
havok_config.cpp