미사일과 비트 맵 지형의 교차점을 찾는 가장 효율적인 방법은 무엇입니까? 상당히 깊숙이 이동했다고 말합니다. 처음

2D 비트 맵 지형의 기울기를 찾는 것에 대한 이전 질문에 이어 이제 미사일이 맞은 2D 지형의 지점을 찾는 가장 좋은 방법을 알아야합니다. 분명히, 미사일 아래의 픽셀이 지형과 교차하는지 알 수 있지만, 지형으로 상당히 깊숙이 이동했다고 말합니다.

처음 충돌 한 위치를 찾기 위해 뒤로 물러 설 수있는 가장 좋은 방법은 무엇입니까? 한 번에 X 픽셀을 미사일의 이전 위치로 되돌릴 수 있지만 X의 좋은 가치는 무엇입니까? 더 똑똑한 방법이 있습니까? 어쩌면 반 거리를 이동 한 다음 1/4 등을 움직일 수 있습니까?



답변

충돌 테스트의 경우 틱별로 정적 테스트를 수행하지 말고 추적 / 스윕 테스트를 수행해야합니다.

여기에는 다양한 종류의 프리미티브에 대한 다양한 공식 목록이 있습니다. http://www.realtimerendering.com/intersections.html

물론, 터 레인을 테스트 할 수있는 일종의 프리미티브 (예 : 선 세그먼트)로 지형을 분류 할 수 있다고 가정합니다. 여러 가지 방법이 있습니다.

이 질문도 참조하십시오 (약간 관련되어 있음) : 움직이는 구 사이의 충돌을 감지하는 좋은 알고리즘은 무엇입니까?


답변

이진 검색은 약간의 풍경과 빠르게 움직이는 발사체가 있으면 도움이되지 않습니다.

최선의 선택은 한 번에 픽셀 단위로 경로를 따라 발사체의 앞면을 가로 지르는 선을 청소하는 것입니다. 모든 단계에서 수행하지 않도록 전체 볼륨에 대해 경계 점검을 먼저 수행 할 수 있습니다.


답변

미사일은 매 프레임마다 많은 양의 픽셀을 움직일 것 같지 않기 때문에 (화면에서 매끄럽지 않을 것입니다) 경로의 모든 픽셀을 확인하지 않는 이유는 없습니다. Bressenham 라인 알고리즘은 친구이며 일반적으로 모든 픽셀의 비디오 메모리에 액세스하지 않으려는 경우 비트 맵의 ​​로컬 사본을 얻었는지 확인하십시오. 비트 맵 터 레인이 완전히 랜덤하다고 가정합니다 (파괴 가능한 웜 터 레인에 따라). 당신의 세계가 타일 기반이라면 당신이 알고있는 모든 타일을 건너 뛸 수 있지만, 앞서 언급했듯이, 확인해야 할 미사일이 너무 많지 않으면 너무 느린 플랫폼을 생각할 수 없었습니다. 픽셀 단위로 테스트하기 만하면 프리미티브에 월드를 정의 할 필요가 없습니다 (웜 클론이 까다로울 수 있습니다)


답변

다른 답변 외에도 “알려진 유사한 상태”블록으로 많은 픽셀을 “수집”하는 것과 관련하여 약간의 부기를 유지하려는 경우 속도를 높이기 위해 수행 할 수있는 작업이 있습니다. 예를 들어 가장 높은 지형 조각의 높이를 저장할 수 있으므로 미사일이 그 이상인 한 아무 것도 치지 않을 것입니다. 또한 가장 낮은 “공기”공간의 높이를 저장할 수 있으므로 미사일이 그 고도에 도달하면 무언가를 쳐야 만한다는 것을 알 수 있습니다. 이것보다 더 나아가서, 모든 지형 인 영역을 나타내는 사각형과 모든 공기 인 사각형을 저장할 수 있지만 값보다 더 효과적 일 수 있습니다.

궁극적으로 가장 좋은 방법은 아마도 “각 지형 기둥의 높이에서 저장”하고 경로의 각 단계에서 미사일 높이를 계산하는 것입니다. 나는 더 현대적인 게임에 대해 말할 수는 없지만, 당신이 Scorched Earth에서 “동굴”을 만들 때 동굴 위의 지형이 똑바로 떨어져서 돌출부를 남기지 않는다고 생각합니다. 돌출부를 원하면 작업이 약간 커지지 만이 기본 아이디어의 확장이 될 것입니다. (힌트 : 기본 아이디어가 먼저 작동하도록하십시오!)

지형은 완전히 임의적 일 수 있으므로 지름길이 없습니다. 지형을 스플라인 또는 무언가로 강요하더라도 지형을 파괴하기 시작하면 화를 내고 라인 스플라인 교차 테스트는 반복적이고 완벽하지 않거나 철저하고 철저하게 문제의 유형에 대해 속도가 느립니다.


답변