[서버] 데드 레커닝(Dead Reckoning)
2015. 5. 23. 03:11ㆍ프로그래밍/서버
728x90
728x90
서론
- 실시간 달리기 게임을 만들기 위해 서버에서 패킷을 보내는데
- 1초에 60번을 랜더링하는 화면에 패킷을 1초에 60개를 뿌릴 수 없다.
- 그래서 이것 저것 찾아서 알게 된 개념이다.
데드 레커닝
정의
- 분산 네트워크 기반 실시간 시뮬레이션 환경에서 트래픽 데이터(traffic data)를 감소시키기 위해 사용하는 기법.
- 데드(dead)라는 말은 신호를 받지 못하고 있는 상태를 말하며 레커닝(reckoning)은 추산한다는 의미로 신호가 없는 동안에는 추측하여 상태 정보를 갱신하는 것을 말한다.
- 영어로 찾아보니 추측 항법이라는 용어를 찾을 수 있었다.
- 배의 방향, 여행 경로를 추측하는데 쓰이는 방법이라고 한다.
- 게임에 적용하면 캐릭터의 이동경로를 예측하는 방법이라고 할 수 있겠다.
현재 위치 = 이전위치 + (속도\*시간) + (1/2\*가속도\*시간^2)
- 이렇게 구현하면 된다고 하는데... 자세히 보니......... 이건 그냥 가속도 공식인데.........
아무튼 구현
- 달리기 게임 동기화를 해보았다.
- 몇 시간을 고민하고 지우고 코딩하고 지우고 코딩하고 !!!!!!!!!!
- 한 두살만 어렸어도 머리가 더 빨리 돌아갔을 터인데 아쉽다.
- 이동 패킷을 1초 간격이라고 했을 때, 이전 패킷의 위치와 현재 패킷의 위치를 빼면 간격이 1초이므로 속도이자 예상 초당 이동 거리가 된다.
- 거기에 예상랜더링 거리는 오차 + 위에서 계산한 거리만큼 랜더링을 하며 다음 패킷이 올때까지 열심히 그린다.
- 여기에 더 꼼꼼하게 하려면 위의 1초당 예상 이동거리는 속도나 마찬가지므로 이전 속도를 저장해둔다.
- 현재 속도 - 이전 속도를 하면 가속도가 나오므로 해당 값의 1/2을 해서 거리 계산에 더해주면 더 세밀하게 계산된다.
728x90
반응형
'프로그래밍 > 서버' 카테고리의 다른 글
동기화 (0) | 2015.07.23 |
---|---|
Thread (0) | 2015.07.23 |
Blocking vs Non-Blocking (0) | 2015.07.12 |
Overlapped I/O 모델 (0) | 2015.05.17 |
IOCP 정리 (0) | 2015.05.14 |
TCP/IP 프로토콜 개요 (1) | 2015.04.27 |
메모리 풀(Memory Pool) (0) | 2015.03.18 |