Proud::CPositionFollower 클래스 참조

Public 멤버 함수

PROUD_API void SetGravity (const Vector3 &value)
 
PROUD_API void SetTargetVelocity (const Vector3 &value)
 
PROUD_API void SetTargetPosition (const Vector3 &value)
 
PROUD_API Vector3 GetSplineFollowerPosition () const
 
PROUD_API Vector3 GetSplineFollowerVelocity () const
 
PROUD_API Vector3 GetGravity () const
 
PROUD_API Vector3 GetTargetVelocity () const
 
PROUD_API Vector3 GetTargetPosition () const
 
PROUD_API void SetFollowerVelocity (const Vector3 &value)
 
PROUD_API void SetFollowerPosition (const Vector3 &value)
 
PROUD_API Vector3 GetFollowerVelocity () const
 
PROUD_API Vector3 GetFollowerPosition () const
 
PROUD_API void SetWarpThreshold (double warpThreshold)
 
PROUD_API bool IsFirstUse ()
 
PROUD_API void SetFollowDuration (double duration)
 
PROUD_API double GetFollowDuration ()
 
PROUD_API void EnableAutoFollowDuration (bool val)
 
PROUD_API void GetTarget (Vector3 &position, Vector3 &velocity) const
 
PROUD_API void GetFollower (Vector3 &position, Vector3 &velocity) const
 
PROUD_API void SetFollower (Vector3 position, Vector3 velocity)
 
virtual PROUD_API void FrameMove (double elapsedTime)
 
virtual PROUD_API void SetTarget (Vector3 position, Vector3 velocity)
 

상세한 설명

remote object의 jittering되는 position,velocity를 linear interpolation으로 smoothing 처리하는 class이다.

예를 들어, remote object를 dead reckoning을 할 때 유용하다.

(나중에, 이 class를 보강해서, orientation을 quaternion 등으로 interpolation하는 기능이 추가되어도 쓸만하겠다.)

일반적인 사용법

중력에 대한 고려 사항

  • 점프 등이 있는 게임에서는 캐릭터가 점프 중 직선 이동이 어색할 수밖에 없다. 따라서 점프중에는 중력이 작용해서 계속해서 하향 곡선을 그려야 한다. 이럴 때 SetGravity를 통해 중력 값을 미리 넣어둘 수 있다.

멤버 함수 문서화

PROUD_API void Proud::CPositionFollower::EnableAutoFollowDuration ( bool  val)

true로 세팅하면 follower가 target까지 다다르는 시간을 자동으로 조절한다.

virtual PROUD_API void Proud::CPositionFollower::FrameMove ( double  elapsedTime)
virtual

매 타임 프레임마다 이 메서드를 호출해야 한다.

매개변수
elapsedTime한 프레임의 시간(초)
PROUD_API double Proud::CPositionFollower::GetFollowDuration ( )

마지막으로 SetFollowDuration으로 입력한 값을 출력한다.

PROUD_API void Proud::CPositionFollower::GetFollower ( Vector3 position,
Vector3 velocity 
) const

follower의 position, velocity를 구한다.

매개변수
position얻어올 Follower의 위치 vector3
velocity얻어올 Follower의 속도 vector3
PROUD_API Vector3 Proud::CPositionFollower::GetFollowerPosition ( ) const

position follower 자체의 현재 위치를 얻는다.

  • SetFollowerPosition에서 입력한 값과 다를 수 있다. 왜냐하면 FrameMove에 의해 지속적으로 갱신되기 때문이다.
PROUD_API Vector3 Proud::CPositionFollower::GetFollowerVelocity ( ) const

position follower 자체의 현재 속도를 얻는다.

  • SetFollowerVelocity에서 입력한 값과 다를 수 있다. 왜냐하면 FrameMove에 의해 지속적으로 갱신되기 때문이다.
PROUD_API Vector3 Proud::CPositionFollower::GetGravity ( ) const

마지막으로 입력한 중력 값을 얻는다.

PROUD_API Vector3 Proud::CPositionFollower::GetSplineFollowerPosition ( ) const

spline 형태로 쫓아가는 follower의 위치를 얻는다.

PROUD_API Vector3 Proud::CPositionFollower::GetSplineFollowerVelocity ( ) const

spline 형태로 쫓아가는 follower의 현 속도를 얻는다.

PROUD_API void Proud::CPositionFollower::GetTarget ( Vector3 position,
Vector3 velocity 
) const

follower가 따라가는 target의 pos, vel을 구한다.

매개변수
position얻어올 타겟의 위치 vector3
velocity얻어올 타겟의 속도 vector3
PROUD_API Vector3 Proud::CPositionFollower::GetTargetPosition ( ) const

position follower가 쫓아가는 목표 지점의 현재 위치를 얻는다.

  • SetTargetPosition에서 입력한 값과 다를 수 있다. 왜냐하면 FrameMove에 의해 지속적으로 갱신되기 때문이다.
PROUD_API Vector3 Proud::CPositionFollower::GetTargetVelocity ( ) const

position follower가 쫓아가는 목표 지점의 현재 속도를 얻는다.

PROUD_API bool Proud::CPositionFollower::IsFirstUse ( )

FrameMove()가 1회 이상 사용되었는가?

PROUD_API void Proud::CPositionFollower::SetFollowDuration ( double  duration)

follower가 target까지 다다르는 시간을 설정한다.

  • EnableAutoFollowDuration(true)를 호출한 상태이면 이 메서드는 실행이 무시된다. 대신, 내부적으로 적절한 duration을 자동으로 찾는다.
  • 이 값은 일반적으로 SetTargetPosition,SetTarget,SetTargetVelocity가 호출되는 주기보다 약간 길게 잡는 것이 좋다. 지나치게 작은 값을 넣으면 움직임이 너무 튀며, 너무 큰 값을 넣으면 움직임의 정확성이 떨어진다.
    매개변수
    durationfollower가 target까지 다다르는 시간(초단위)
PROUD_API void Proud::CPositionFollower::SetFollower ( Vector3  position,
Vector3  velocity 
)

SetFollowerVelocity,SetFollowerPosition을 한번에 모두 호출한다.

PROUD_API void Proud::CPositionFollower::SetFollowerPosition ( const Vector3 value)

position follower 자체의 위치를 지정한다.

  • remote object의 초기 상태를 세팅할 때에 쓰인다.
PROUD_API void Proud::CPositionFollower::SetFollowerVelocity ( const Vector3 value)

position follower 자체의 속도를 지정한다.

  • remote object의 초기 상태를 세팅할 때에 쓰인다.
PROUD_API void Proud::CPositionFollower::SetGravity ( const Vector3 value)

중력을 세팅한다.

  • 중력을 세팅하게 되면, follower와 target이 모두 영향을 받는다. 예를 들어, 점프를 하는 캐릭터라면 이 메서드가 필요할 것이다.
virtual PROUD_API void Proud::CPositionFollower::SetTarget ( Vector3  position,
Vector3  velocity 
)
virtual

SetTargetPosition과 SetTargetVelocity를 한번에 모두 호출한다.

PROUD_API void Proud::CPositionFollower::SetTargetPosition ( const Vector3 value)

position follower가 쫓아갈 투명 오브젝트의 위치를 세팅한다.

  • 타 호스트로부터 상대방 캐릭터의 위치를 받으면 이 메서드를 호출할 필요가 있을 것이다.
PROUD_API void Proud::CPositionFollower::SetTargetVelocity ( const Vector3 value)

position follower가 쫓아갈 투명 오브젝트의 속도를 세팅한다.

  • 타 호스트로부터 상대방 캐릭터의 위치를 받으면 이 메서드를 호출할 필요가 있을 것이다.
PROUD_API void Proud::CPositionFollower::SetWarpThreshold ( double  warpThreshold)

만약 새로 받은 target position이 follower와의 거리차가 지나치게 큰 경우, 의도적 워프, 리스폰 혹은 지나친 랙으로 인한 위치 오차일 수 있다. 이런 경우 위치 보정은 오히려 이상한 결과를 야기한다. warp threshold를 정해놓으면 지나치게 큰 위치 오차의 경우 보정을 하지 않고 강제로 follower를 target 위치와 일치시킨다.

매개변수
warpThreshold위치 보정을 무시할 수 있는 임계값으로서의 거리