2D 비트 맵 지형의 기울기를 찾는 것에 대한 이전 질문에 이어 이제 미사일이 맞은 2D 지형의 지점을 찾는 가장 좋은 방법을 알아야합니다. 분명히, 미사일 아래의 픽셀이 지형과 교차하는지 알 수 있지만, 지형으로 상당히 깊숙이 이동했다고 말합니다.
처음 충돌 한 위치를 찾기 위해 뒤로 물러 설 수있는 가장 좋은 방법은 무엇입니까? 한 번에 X 픽셀을 미사일의 이전 위치로 되돌릴 수 있지만 X의 좋은 가치는 무엇입니까? 더 똑똑한 방법이 있습니까? 어쩌면 반 거리를 이동 한 다음 1/4 등을 움직일 수 있습니까?
답변
충돌 테스트의 경우 틱별로 정적 테스트를 수행하지 말고 추적 / 스윕 테스트를 수행해야합니다.
여기에는 다양한 종류의 프리미티브에 대한 다양한 공식 목록이 있습니다. http://www.realtimerendering.com/intersections.html
물론, 터 레인을 테스트 할 수있는 일종의 프리미티브 (예 : 선 세그먼트)로 지형을 분류 할 수 있다고 가정합니다. 여러 가지 방법이 있습니다.
이 질문도 참조하십시오 (약간 관련되어 있음) : 움직이는 구 사이의 충돌을 감지하는 좋은 알고리즘은 무엇입니까?
답변
이진 검색은 약간의 풍경과 빠르게 움직이는 발사체가 있으면 도움이되지 않습니다.
최선의 선택은 한 번에 픽셀 단위로 경로를 따라 발사체의 앞면을 가로 지르는 선을 청소하는 것입니다. 모든 단계에서 수행하지 않도록 전체 볼륨에 대해 경계 점검을 먼저 수행 할 수 있습니다.
답변
미사일은 매 프레임마다 많은 양의 픽셀을 움직일 것 같지 않기 때문에 (화면에서 매끄럽지 않을 것입니다) 경로의 모든 픽셀을 확인하지 않는 이유는 없습니다. Bressenham 라인 알고리즘은 친구이며 일반적으로 모든 픽셀의 비디오 메모리에 액세스하지 않으려는 경우 비트 맵의 로컬 사본을 얻었는지 확인하십시오. 비트 맵 터 레인이 완전히 랜덤하다고 가정합니다 (파괴 가능한 웜 터 레인에 따라). 당신의 세계가 타일 기반이라면 당신이 알고있는 모든 타일을 건너 뛸 수 있지만, 앞서 언급했듯이, 확인해야 할 미사일이 너무 많지 않으면 너무 느린 플랫폼을 생각할 수 없었습니다. 픽셀 단위로 테스트하기 만하면 프리미티브에 월드를 정의 할 필요가 없습니다 (웜 클론이 까다로울 수 있습니다)
답변
다른 답변 외에도 “알려진 유사한 상태”블록으로 많은 픽셀을 “수집”하는 것과 관련하여 약간의 부기를 유지하려는 경우 속도를 높이기 위해 수행 할 수있는 작업이 있습니다. 예를 들어 가장 높은 지형 조각의 높이를 저장할 수 있으므로 미사일이 그 이상인 한 아무 것도 치지 않을 것입니다. 또한 가장 낮은 “공기”공간의 높이를 저장할 수 있으므로 미사일이 그 고도에 도달하면 무언가를 쳐야 만한다는 것을 알 수 있습니다. 이것보다 더 나아가서, 모든 지형 인 영역을 나타내는 사각형과 모든 공기 인 사각형을 저장할 수 있지만 값보다 더 효과적 일 수 있습니다.
궁극적으로 가장 좋은 방법은 아마도 “각 지형 기둥의 높이에서 저장”하고 경로의 각 단계에서 미사일 높이를 계산하는 것입니다. 나는 더 현대적인 게임에 대해 말할 수는 없지만, 당신이 Scorched Earth에서 “동굴”을 만들 때 동굴 위의 지형이 똑바로 떨어져서 돌출부를 남기지 않는다고 생각합니다. 돌출부를 원하면 작업이 약간 커지지 만이 기본 아이디어의 확장이 될 것입니다. (힌트 : 기본 아이디어가 먼저 작동하도록하십시오!)
지형은 완전히 임의적 일 수 있으므로 지름길이 없습니다. 지형을 스플라인 또는 무언가로 강요하더라도 지형을 파괴하기 시작하면 화를 내고 라인 스플라인 교차 테스트는 반복적이고 완벽하지 않거나 철저하고 철저하게 문제의 유형에 대해 속도가 느립니다.