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


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.