블로그는 나의 힘!
[ Programing ]/DirtectX92009. 12. 24. 00:32
[텍스쳐 직선 이동 공식] D3DXVec3Normalize( &vecNormalize, &vecDirection );     vecPOS += ( vecNormalize *fMove );
=================================================================================== 
int move = (한번에 이동할 거리);
vec3 dir             = B - A;                     // 방향
float len             = length( dir );            // 이동할 거리
dir                     = normalize( dir );
int moveCount    = len / move;             // 이동 횟수
for( int i = 0; i < moveCount; ++i )
{
     A = A + dir * move;     // 이동 중
}
A = B;                       // 이동 완료
 
/////////////////////////////////////////////////////////////////////////////////////////////
 
struct TAG_CARD   // Card Data
{
 D3DXVECTOR3  vecPOSBF;          // Before Position
 D3DXVECTOR3  vecPOSAF;          // After Position
 D3DXVECTOR3  vecNormalize;       // Normalize
 FLOAT               fMove;                  // Move Data
 INT                    nMVRepetition;     // Move Repetition Count
}; 
 
// 이동할 위치 설정 ( 카드 객체, 이동할 좌표, 이동 횟수 )
 HRESULT cCardMng::SetMovePosition( TAG_CARD& tagCard, D3DXVECTOR3 vecAfter, INT nMVRepetition )

     const D3DXVECTOR3 vecDIR = vecAfter -tagCard.vecPOSBF; // 방향
     tagCard.fMove    = D3DXVec3Length( &vecDIR ) /static_cast< FLOAT >( nMVRepetition ); // 이동할 거리
     tagCard.vecPOSAF   = vecAfter;  // 최종 이동할 위치
     tagCard.nMVRepetition  = nMVRepetition; // 이동 횟수
     D3DXVec3Normalize( &tagCard.vecNormalize, &vecDIR ); 
    // 곡선이나 다른 값 대입 시 Normalize 대신 방정식을 넣는다. 현 좌표와 이동할 좌표 까지 루프를 돌리고 이동할 거리를 계속 넣어 주면 된다.
     
     return S_OK;
}
 
// SetMovePosition() 으로 설정한 만큼 이동.
 D3DXVECTOR3 cCardMng::DynamicMove( TAG_CARD& tagCard )

     // vecPOSBF + vecNormalize * fMove  -> 이동 공식
     if( tagCard.vecPOSBF != tagCard.vecPOSAF )    // 목적지 도착했다면 넘어간다.
     {
          tagCard.vecPOSBF += ( tagCard.vecNormalize *tagCard.fMove );
          if( tagCard.vecPOSBF > tagCard.vecPOSAF ) tagCard.vecPOSBF = tagCard.vecPOSAF;    
          // 만약 이동하는 좌표가 목적지를 초과하면 강제 대입 이동

     } // >>> END if
     return tagCard.vecPOSBF;
}   
 

 - 조금씩 이동할 거리를 '이동할 좌표 - 현재 좌표' 한 값의 노멀라이징 한것에 곱해 주고 현재 좌표랑 더해 줘서 이동할 좌표 만큼 루프를 돌리면 직선 이동한다.
 - 곡선이나 다른 값 대입 시 Normalize 대신 방정식을 넣는다. 현 좌표와 이동할 좌표 까지 루프를 돌리고 이동할 거리를 계속 넣어 주면 된다.
 - 직접 좌표 건들 필요 없이 이렇게 사용 가능하다. 응용하면 곡선도 가능.
Posted by Mister_Q