MoniWiki메모장_물리
Login:
Password:
대문|찾기|바뀐글|목록|메모장|책갈피|연꽃|링크
Edit Diff Reload Search Print Info Mail Help RSS

@ 2004-11-23 @

  ���������� ������ (������ �� ����^^)
1 �������� ����
2 ���������� ������
2.1 Euler's Method
2.2 Hook's law
2.3 Verlet Intergrator
3 Chaos
4 Jump ��������
{_r} ���������� ����

* ��������

1 �������� ���� #

#.PPU(�������� �������� ����) ; CPU�� �������� ������ ������ ������ ���� ������ �������� ��������
/ ���� ������������ ���� ���� = CPU + GPU + PPU

#.GPU (Graphics Processing Unit)��
�������������� CPU������ ���������� �������� �������� ���������� ������ ���� ������, ���� �������� ������ 3D������ ���� ������ �������� GPU�� ���� ����������.

GPU���� ������ ��������(NVIDIA)������ 1999���� ��������(GeForce)������ ������ ������ ������ ��������(Graphics Controller: ������������ ��)�� �������� ���� ������ ������. �������� CPU�� ���� ���� ���������� ������(Polygon: 3D �������� �������� ����)�� ����(Transform) �� ����(Lighting)������ �������� ����, ������ ����������(Hardware) T&L���� ������ ������. ���� �������� �������� ������ ������������ ������ ���� ���������� ������ ���� ���������� GPU���� ������ ���� ������. ������ �������� ���� �� 1���� ���� 2000��, ATi(������ AMD)������ ��������(Radeon)�������� GPU�� �������� ������ ������ ������ ������ ����.

#.���� > Havok - ���� ������ CPU���� ���� ������ ����


-. ���������� �������� ����, ���� ���������� ������ ������
���� �������� ������ ���� ����(����) ������ ������ ��, ���� ���������� ����
--> ���� ����, ���� ������ ���� ������ ������ ������ ���� ����

#.NVIDIA > (AGEIA) PhysX - ���� ������ �������������� ���� ������ ����


2 ���������� ������ #

2.1 Euler's Method #

  • ��F(t) = m*A ( m�� ����, A�� ������ )
    F(t)�� ���� ���� ��, ������������ ������ ������ ������ ������ ���� ������R(t)�� ���� ����.
  • ��t<<1 ( Δt가 충분히 작다면 )
    �� Rnew = Rold + Vnew����t ( R�� ����, Rold�� �������� ) {_-} ������ ���� ���� ������ ������.
    �� Vnew = Vold + F/m����t ( V�� ����, Vold�� �������� )

2.2 Hook's law #

  • ����������(ks); ������ ���� ������ {_-} ������ ��������
    -1) ������ ������ ������ ������ ���������� ������ ����
    --> ������ �������� ���� ������ �������� ������ �������� ������ ����.
    -2) �������� �������� ������ (������ ����)������ ���� ������ ����
  • ��������(kd); �������� �������� ���� ������ ���������� ����
    -1) ���������� ���� �������� ���� ���� ��������. -> ������ ���� ����
    ���������� ������ �������� �� ������ ���� ������ ���� �� �� ����.
  • ������ �������� ���� �������� ���� m�� ������ ������ ���� ���� ��,
    ��Fs = -ks(l - lo)
    ( ks�� ����������, l�� �������� ������ ����, lo�� �������� �������� )
    ��Fd = kd(v1 - v2)
    ( kd�� ��������, v1�� ���� ����, v2�� ��������, (v1 - v2)�� �������� )
    ��F = Fs + Fd {_-} Euler's Method �������� ������Rnew�� ������.
  • �� ���� �������� ������ ������ �� ������ ������ ���� ������ ���� ���� ������ �������� ������ ����.

2.3 Verlet Intergrator #

  • �������� �������� �������� ���� �������� ������ �� ����, �������� ���� �������� ����������.
    �� R( t+��t ) = 2R(t) - R(t-��t) + A*��t��
  • -1) ������ ������ V(����)�� R(����)�� ������ 2���� R(����)�� ����
    -2) ������ R(t-��t) = R(t) - V(t)*��t �� ����
    -3) �������� ������ ������ 2~3�� ������ ������ ���� ���������� �������� �� ����.


3 Chaos #

  • ���������� ���� �������� khaos���� ���� �������� ������ ���������� Chaos(������, ���������� ����)�� ��������.
    • ���� �������� ���� ���������� ����(=������)�� �������� �� ���� ������ ���������� ���� ���������� ���� �������� ������ ������ �������� ��������, ���� �������� ���������� �������� �� ������ ������ �������� ���� �������� ����
  • �������� ���� ��;
    y = ax(1-x) a�� ����, x�� �������� 0.1������ ������ ��,
    ������ ���� ������ x�� ���� ���� ������ y�� ���� ��������.(0�� 1���� ��)


4 Jump �������� #

  • ������ ���� 3���� �������� ����
    -1.�������� ���� �������� ����
    -2.������ ���� �������� �������� ���� �������� ����(������ ����)
    -3.������ ���� �������� ����

  • ���� ������ ������ float ������ ���� �������� �������� ������ ������ ����
    -.m_fGravity += (JumpGHIGHTRAVITY * (fDelta*fDelta)*0.5f ); ����
    (fDelta*fDelta)*0.5f�� ������ ������ ���� ������ �������� ������ ����.
    -.������; ������ ����(����time)�� �������� ���� ��, �������� ������ ������ ������.
    -.oldTrans; ������ ����
    kNewTrans; ������ ���� ����


const float JumpGHIGHTRAVITY 1800.0f
const float SAFEHEIGHT = 2.0f;
const float STARTJUMP  = 100.0f;
static float fUp = 0.0f;	

// ���� ����
if( !������ && ���� ������������ ��������? )
{
  m_bJumpstart = true;
  m_bJump = true;
  fUp = STARTJUMP;
  m_fGravity = 0.0f;
}

if( m_bJump )  // ���� ����
{
  m_fGravity += (JumpGHIGHTRAVITY * (fDelta*fDelta)*0.5f );
  fUp -= m_fGravity;

  if( fUp &lt; 0.0f )
  {
    m_fGravity = 0.0f;
    m_bJump = false;
  }
  else
  {
    oldTrans.z += fUp;		
  }
}
else	// ���� ����
{
  if( (oldTrans.z - kNewTrans.z) > SAFEHEIGHT )
  {
    m_fGravity += (JumpGHIGHTRAVITY * (fDelta*fDelta)*0.5f );
    oldTrans.z -= m_fGravity;
  }
  else
  {
    oldTrans = kNewTrans;
    m_fGravity = 0.0f;
    m_bJumpstart = false;
  }
}

  • ���� �������� ������ �������� ������ ���� ���� ���� ������ ���������� �������� ������ ������
    �������� �� ������ ���� �������� jump start�� ������ ���������� ����
    -.������ �������� ���� ���� ���� Sin������ ������ ���� �� �������� ���� �������� ����
    -.���� ������ ������ ���� ����(m_pSavePosition)�� ���� �� ������������ �������� ����
    -.������������ m_bJump02 = false, m_bJumpstart = false���� ���� ��������


class className
{
public:
  void StartJump();	

private:
  Point3	m_vSavePosition;
  bool	m_bJump02;	// ���� �������� ������ �������� ���� ���� �������� ����	
  bool 	m_bJumpstart;	// ������ �� �� ���� ���� ������ ����

  float 	m_fGravity;
  float 	m_fHightPos;
  float	m_fJumpStartTime;
  float 	m_fJumpTime;
  float	m_fJumpTimeMAX;
}
-----------------------------------------------------------------------------------
const float DEF_JumpGHIGHTRAVITY = 1600.0f;
const float DEF_JumpRAD = PI * 0.5;	// 90��
const float DEF_JumpMAX = 12.0f;	// jump�� ���� ������ ����

void className::StartJump()	
{ 
  if( m_bJumpstart == true )	
    return;

  CPlayer * pkPlayer = GetPlayer();
  _TKASSERT( pkPlayer );
  
  m_pSavePosition = pkPlayer->GetWorldTranslate();

  ControllerSequence* pkSequence = pkPlayer->GetSequence(Animation_jump);
  m_fJumpTimeMAX = pkSequence->GetLength() * 1.1f;
  m_fJumpTime = m_fJumpTimeMAX * 0.5f;
  m_fJumpStartTime = GetCurTime();

  m_bJumpstart = true;
  m_bJump02 = true;
}

bool className::UpDate()
{
  ...
  // ���� �� ���� ���� - Sin������ ������ ���� �� �������� ���� �������� ����
  //=========================================================================================
  float fjumptime = GetCurTime() - m_fJumpStartTime;

  if( m_bJump02 )	  // ������ ���� ����
  {
    float fjumpRAD = (fjumptime/m_fJumpTime) * DEF_JumpRAD;

    if( fjumptime &lt; m_fJumpTime )	// ���� ��
    {
      m_fHightPos = Sin(fjumpRAD) * DEF_JumpMAX;
      m_fHightPos += m_vSavePosition.z;
    }
    else		// ���� ��������
    {
      m_fHightPos = m_vSavePosition.z + DEF_JumpMAX;
      m_bJump02 = false;
    }		
  }
  else  //������ ������ ����
  {
    if((oldTrans.z - kNewTrans.z) &lt; 2.0f)
    {
      m_fHightPos = kNewTrans.z;
      oldTrans = kNewTrans;
    }

    if(m_fHightPos > kNewTrans.z)
    {
      m_fGravity += (DEF_JumpGHIGHTRAVITY * ((fDelta*fDelta)*0.5));
      m_fHightPos  -= m_fGravity;
    }
    else	// if(m_fHightPos &lt;= kNewTrans.z)
    {
      m_fHightPos = kNewTrans.z;
      m_fGravity = 0.0f;
      m_bJumpstart = false;
      m_bJump02 = false;
    }
  }

  oldTrans.z = m_fHightPos;
}




{_r} ���������� ����

November, 2026
1234567
891011121314
15161718192021
22232425262728
2930 

차가운 차와 차가운 밥은 참을 수 있지만 차가운 이야기는 견디지 못한다(중국속담)

바람06_2016
나무_Format
책갈피_부자들의_생각법
UserPreferences
last modified 2014-03-17 16:09:52
고치기|찾기|쪽 지우기|비슷한 쪽 Valid XHTML 1.0! Valid CSS! powerd by MoniWiki
0.2581 sec