움직이는 구 사이의 충돌을 감지하는 좋은 알고리즘은 무엇입니까?


27

(충돌 감지 목적으로) 게임에서 3D 객체가 구체로 표시되는 경우 구체 간 충돌을 감지하는 좋은 알고리즘은 무엇입니까?

각 객체에 마지막 프레임의 위치와 새로운 (원하는) 위치가있는 경우 구형이 이전 프레임에서 교차하지 않은 충돌을 식별하고 두 번째 프레임에서 교차하지 않을 수있는 좋은 알고리즘은 무엇입니까? 그러나 그들 사이 어딘가에 교차 했습니까?

답변:


18

기본적으로 추적을 찾고 있습니다.

이 페이지가 도움이 될 것입니다 : http://www.realtimerendering.com/intersections.html

움직이는 구체 / 구 : (위치) 움직이는 구체의 반경을 정적 구체에 추가하고 움직이는 구체를 광선으로 취급합니다. 이 광선을 사용하여 광선 / 구 교차점을 수행하십시오. 고메즈 참조; 코드 슈뢰더 (문서 파생에 버그가 있고 코드가 양호 함); 및 RTR2, p. 622.


1
두 구체가 움직일 경우 작동하지 않습니다 (두 번 누르더라도). 먼저 이동 a에 걸친 선과 하나의 스팬 이동 b 사이의 거리를 확인해야하며 반경 a + 반경 b보다 작 으면 충돌이 발생할 수 있습니다. 그 후 나는 그 지점이 구 a의 시간 위치와 구 b의 ​​시간이 가까운 지 확인하기 위해 점검을 할 것입니다. 그렇다면 해당 지점의 시간 거리에 대해 속도를 확인하고 충돌 가능성이 있으면 단계적으로 조정합니다.
Kaj

15
실제로, 당신은 움직임을 상대적으로 만들어야합니다. 두 구가 움직이면 두 구에서 구의 속도를 빼면 하나의 "움직이는"구와 하나의 "정지 된"구가 생깁니다. 그런 다음 위를 사용할 수 있습니다.
Tetrad


4

내 머리 꼭대기에서 :

  1. 각 원의 중앙에서 시작하여 그 시간 단계로 이동 한 지점까지 두 개의 선분을 만듭니다.
  2. 이 두 선분 사이의 최소 거리를 찾으십시오. 여기에 설명되어 있습니다 .
  3. 그 거리가 첫 번째 원의 반지름과 두 번째 원의 반지름보다 작거나 같으면 충돌했습니다. 그렇지 않으면 그들은하지 않았다.

그리고 그것이 전부입니다. 나는 그것이 매우 빠를 것으로 기대합니다.


1

또 다른 멋진 Gamasatura 기사가 있습니다.


1
나는 이것이 7 년 후에 깨달았지만이 대답은 링크 일뿐입니다. 다행히도 링크는 여전히 살아 있지만 그렇지 않은 경우 대답은 ... 답장이 아닙니다.
Draco18s

0

이 일을 한 사람으로 말하면 번거롭지 않습니다 . 게임 디자인에 꼭 필요한 것이 아니라면 거의 필요하지 않은 한, 실제로 예상보다 스위핑 작업에 더 많은 노력을 기울일 것입니다. 그리고 당신이 원하는 것보다 느릴 것입니다.


그는 당신이 아는 모든 사람을 위해 수영장 게임을 만들 수 있습니다.
Kaj

그가 풀 게임을하고 있다면 그의 "게임 디자인은 절대적으로 그것을 필요로한다" .
deft_code

당신이 옳습니다 . 바퀴를 재발 명하지 마십시오 . 그러나 운동을 위해서만 가치가 있습니다.
user712092

4
나는 대답 으로 직접적인 낙담에 동의하지 않는다 .
bobobobo

@bobobobo에 동의합니다. 문제가 번거롭지 않은지 여부는 문제가 아닙니다.이 스레드를 보는 미래의 사용자는 비용에 관계없이 대답이 절대적으로 필요할 수 있습니다. 이것은 의견으로 더 좋습니다.
TomTsagk


0

움직이는 물체의 충돌 감지를 일반적으로 "스윕 볼륨 계산"이라고하며,이 주제에 대한 코드 / 기사입니다.

http://www.gpu-voxels.org/demos/ (데모)

소스 코드 라이브러리 :

https://github.com/fzi-forschungszentrum-informatik/gpu-voxels

https://libigl.github.io/tutorial/#swept-volume

https://github.com/gradientspace/geometry3Sharp

조항:

http://gamma.cs.unc.edu/SV/sm03.pdf

https://www.cs.columbia.edu/~allen/PAPERS/abrams.swept.pdf (불행히도 소스 코드는 없습니다)

http://www.realtimerendering.com/intersections.html (무거운 링크 모음)


1
링크 만 포함 된 답변 (이 경우에는 여러 개)에는 실제 답변이 포함되지 않습니다. 링크가 작동하지 않더라도 게시물을 계속 이해할 수 있도록 게시물에 관련 정보를 포함시켜야합니다.
Draco18s

링크 뒤에있는 정보는 현재 나보다 약간 더 잘 설명되어 있습니다. 링크 뒤에 데모 비디오가 있으며, 실시간으로 일어나는 일에 대한 인식을 제공합니다.
TarmoPikaro

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.