GroupFilter

MMORPG에서는 아직까지 캐릭터끼리는 충돌 안하는 경우가 많다. 하복에서 캐릭터끼리의 충돌을 막을려면 hkpGroupFilter를 사용한다.

충돌 레이어를 정하는 것이다.
동적인 박스끼리 충돌 하지 않기 때문에 박스의 회전 방향이 동일하다.

< 필요한 헤더 파일과 레이어 >

#include  <Physics/Collide/Filter/Group/hkpGroupFilter.h>

 

enum  COLLISION_LAYER

{

    LAYER_STATIC_BACKGROUND = 1,

    LAYER_ACTOR = 2,

};

MakeGround( )시 생성되는 정적인 박스를 LAYER_STATIC_BACKGROUND 레이어로 셋팅하고 MakeBox( )로 생성된 동적인 박스를 LAYER_ACTOR로 셋팅한다.

< 레이어 설정 >

bool  InitHavok()

{

    ..............

 

    // Replace filter

    hkpGroupFilter* groupFilter = new  hkpGroupFilter();

    groupFilter->disableCollisionsBetween( LAYER_ACTOR, LAYER_ACTOR );

 

    physicsWorld->setCollisionFilter( groupFilter, true );

    groupFilter->removeReference();

    return  true;

}

LAYER_ACTOR로 설정된 충돌체 끼리는 서로 충돌 하지 않는다.
m_collisionFilterInfo에 충돌 레이어를 셋팅한다.

bool  MakeGround()

{

    .........

    bodyInfo.m_collisionFilterInfo = LAYER_STATIC_BACKGROUND;

 

    g_groundBody = new  hkpRigidBody(bodyInfo);

    .........

}

 

bool MakeBox()

{

    .........

    bodyInfo.m_collisionFilterInfo = LAYER_ACTOR;

 

    int  i = 0;

    for( int x = 0; x < g_nx; x++ )

    .........

}

 

프로젝트 : havok_groupFilter.zip