2014-12-12 3 views
3

현재 게임을하고 있는데 클라이언트에서 특정 입자 효과를 내기 위해 서버에서 클라이언트로 패킷을 보내야하지만 클라이언트는이 파티클을 렌더링 할 수 있습니다. 게임에서 반경 64 큐빅 단위.더 빠른 거리 측정

모든 클라이언트에게 패킷을 보내는 것을 피하기 위해 클라이언트와 입자가 시작된 지점 간의 거리를 측정하지만 거리는 각 클라이언트에 대해 계산되며 게임 틱 (50 ms).

입자는 플레이어의 움직임으로 재생되며 멀리있는 모든 클라이언트에게 전송되므로 성능이 약간 중요합니다 (여러 플레이어를 고려할 때).

square(x1 - x2) + square(y1 - y2) + square(z1 - z2);

내 생각은 입자 등을 사용하여 각 축 (128) 길이의 '상자'를 만드는 것이 었습니다 :

게임 API는 두 위치 사이의 거리에 대한 공식 (NO 제곱근)를 제공합니다 중심점,이 단점은 코너에있는 클라이언트가 입자를 렌더링하지 않지만 패킷을 가져와 약간의 대역폭을 낭비한다는 것입니다.

질문 : 유클리드 거리를 사용하여 거리를 측정하는 것은 입자 주변에 '상자'를 만들고 클라이언트가 내부에 있는지 비교하는 것보다 빠릅니다. 더 빠른 거리 측정을위한 다른 방법이 있습니까?

+0

0.x? x/10을 의미하지 않니? – Charlie

+1

@Charlie 다른 객체 위치 에서처럼 '0'이 아니며 'o'입니다. – clcto

+0

그 자체가 게시물 자체에 더하기 코드를 더 했어야했는데 – Charlie

답변

2

특히 많은 수의 점으로이를 수행하는 매우 효율적인 방법은 Oct-tree (3 차원 쿼드 트리)를 데이터 구조로 사용하는 것입니다.

소개는 Wikipedia article을 참조하십시오.

3 차원 공간 인덱스로 특정 3 차원 (직사각형) 범위 내의 점을 빠르게 검색 할 수 있습니다.

더 많은 포인트를 줄이려면 거리 수식을 사용하여 더 많은 포인트를 필터링 할 수 있습니다. 포인트 수는 Oct-tree 공간 인덱스를 사용하면 성능에서 크게 줄어들지 않으므로 이미 상당히 줄어들 것입니다.