< ij¸¯ÅÍÀÇ Ãæµ¹ ¸Þ½¬ À§Ä¡¿Í ·»´õ¸µ ij¸¯ÅÍÀÇ À§Ä¡ ÀÏÄ¡ ½ÃÅ°±â >
ij¸¯ÅÍÀÇ Ãæµ¹ ¸Þ½¬´Â ¾Æ·¡¿Í °°Àº ÄÚµå·Î ¸¸µç´Ù. ½ÇÇàÇϸé ij¸¯ÅÍ´Â À§ ±×¸²Ã³·³ ĸ½¶ÀÇ Á᫐ ³ôÀÌ À§Ä¡¿¡ ij¸¯ÅÍ°¡ µÕµÕ ¶° ÀÖÀ» °ÍÀÌ´Ù. Ãæµ¹ ¸Þ½¬´Â ĸ½¶ÀÇ Áß°£ ³ôÀÌ°¡ Áß½ÉÀÌÁö¸¸ ·»´õ¸µ µÇ´Â ij¸¯ÅÍÀÇ Á᫐ À§Ä¡´Â 0ÀÌ´Ù.
hkVector4 va( 0.0f, 0.0f, CHARACTER_SCALE_RATIO * 0.2f );
hkVector4 vb( 0.0f, 0.0f, CHARACTER_SCALE_RATIO * -0.2f );
m_pStandShape = new hkpCapsuleShape( va, vb, CHARACTER_SCALE_RATIO * 0.497f );
va.setZero4();
m_pCrouchShape = new hkpCapsuleShape( va, vb, CHARACTER_SCALE_RATIO * 0.497f );
|
ĸ½¶ÀÇ Á᫐ ³ôÀ̸¦ 0À¸·Î ¸ÂÃß±â À§Çؼ´Â ´ÙÀ½°ú °°ÀÌ ÇÑ´Ù.
lerp °ªÀ» Àß Á¶Á¤Çϸé ij¸¯ÅÍÀÇ Ãæµ¹ ¸Þ½¬ Áß½ÉÁ¡°ú ·»´õ¸µ µÇ´Â ij¸¯ÅÍÀÇ Áß½ÉÁ¡ÀÌ ÀÏÄ¡ µÉ °ÍÀÌ´Ù.
const hkReal totalHeight = CHARACTER_SCALE_RATIO;
const hkReal radius = CHARACTER_SCALE_RATIO * 0.45f;
float lerp = 4.5f;
hkVector4 va(0, 0, totalHeight + lerp );
hkVector4 vb(0, 0, 0 + lerp );
m_pStandShape = new hkpCapsuleShape( va, vb, radius );
va.setZero4();
m_pCrouchShape = new hkpCapsuleShape( va, vb, radius );
|
Ãæµ¹ ¸Þ½¬ Áß½ÉÁ¡°ú ·»´õ¸µ µÇ´Â ij¸¯ÅÍÀÇ Áß½ÉÁ¡ÀÌ ÀÏÄ¡ ÇÏ´ÂÁö È®ÀÎ Çϱâ À§Çؼ ´ÙÀ½À» ½ÇÇàÇÑ´Ù.
hkpCharacterInput xInput;
m_pHavokRigidBody->checkSupport( stepInfo, xInput.m_surfaceInfo );
hkVector4 charPos = m_pHavokRigidBody->getPosition();
hkVector4 pos = xInput.m_position;
hkVector4 normal = xInput.m_surfaceInfo.m_surfaceNormal;
OutputDebugPrintf( "ij¸¯ÅÍ ³ôÀÌ %.2f: À§Ä¡: %.2f, %.2f, %.2f Ç¥¸é ³ë¸Ö %f, %f, %f\n",
charPos(2), pos(0), pos(1), pos(2),
normal(0), normal(1), normal(2) );
|
Ãâ·Â µÇ´Â ij¸¯ÅÍÀÇ ³ôÀÌ(zÃà) charPos(2)¿Í ÁöÇü°ú Ãæµ¹µÈ Ãæµ¹ Á¤Á¡ÀÇ °ªÀ» ÀÏÄ¡ ½ÃŲ´Ù.
ij¸¯ÅÍ ³ôÀÌ 0.05: À§Ä¡: 0.00, 0.00, 0.05 Ç¥¸é ³ë¸Ö 0.000000, 0.000000, 1.000000
|
< º®°ú Ãæµ¹ ¸é ±¸Çϱâ >
1. hkpCharacterRigidBody::hkpRigidBody::getLinkedCollidable()¸¦ ÀÌ¿ëÇؼ hkpLinkedCollidable·Î hkContactPoint ±¸ÇÏ´Â ¹æ½Ä
HavokCharacter::CheckContactPoint( ) ¸Þ¼Òµå¸¦ ÂüÁ¶ÇÑ´Ù. m_pHavokRigidBody->getSupportInfo·Î ±¸ÇÑ ÁöÇü ³ôÀ̺¸´Ù Å« °æ¿ì¸¦ º®ÀÇ Ãæµ¹ÀÌ¶ó °¡Á¤ÇÑ´Ù.
HavokCharacter::IsCheckWall( const hkVector4& velocity )·Î CheckContactPoint( )¿¡¼ ±¸ÇÑ ContactPoint Áß¿¡¼ ÇöÀç ÁøÇà ¹æÇâÀÇ ¿ª¹æÇâ°úÀÇ °¢µµ Â÷ÀÌ·Î º®°ú Ãæµ¹ Çß´ÂÁö üũÇÑ´Ù.
2. hkContactPoint¸¦ ±¸ÇÏ´Â ¶Ç ÇÑ°¡ÁöÀÇ ¹æ¹ýÀº hkpCharacterRigidBodyListener¸¦ »ó¼ÓÇؼ °¡»óÇÔ¼ö processActualPoints( )¸¦ »ç¿ëÇؼ hkContactPoint( )¸¦ ±¸ÇÏ´Â ¹æ½ÄÀÌ´Ù.
¿©±â¼´Â hkpCharacterRigidBodyListener¸¦ »ó¼ÓÇÑ HavokCharacterListener Ŭ·¡½º¸¦ ¸®½º³Ê·Î ¼ÂÆÃÇÑ´Ù.
HavokCharacterListener* pListener = new HavokCharacterListener();
m_pHavokRigidBody->setListener( pListener );
|
ÇÁ·ÎÁ§Æ® : HavokTest_wall.zip
HavokCharacterListener.h HavokCharacterListener.cpp
HavokCharacter.h HavokCharacter.cpp
|