[원문] https://www.sevenson.com.au/actionscript/sat/ Separating Axis Theorem(SAT)는 볼록다각형(convex polygons) 사이의 충돌을 계산하기 위한 기법입니다. 전 결코 전문가는 아니지만, 저에게 Collision Detection이 필요해진 다음부터, 저는 관련 자료들을 모아왔고, 결국 이를 ActionScript 3로 구현했습니다. 다른 이들이 (저와 같이) 고통을 겪지 않았으면 하는 마음에, 이를 공유합니다. Flash에서 Polygon들 사이의 충돌계산이 필요함을 느꼈을 때부터, 저는 일명 '분리축 검사 이론(SAT)'로 알려진 이 방법을 알게되었습니다. 유일한 문제는, 제가 이를 제 것으로 만들기위해 엄청나게 고생했다는 것이지요. 아주 많은 Collision Detection 자료를 읽고, 코드 샘플을 조사한 뒤에야 파악할 수 있었습니다. 수포자(?)들을 위해, 먼저 이 이론의 기본적인 원리가 어떻게 작동하는지를 가볍게 살펴보겠습니다. The quick rundown 일반적으로, SAT의 목적(그리고 다른 모든 Collision Detection 기법) 의 목표는 두 Shape 사이에 간격이 존재하는 지를 테스트 하는 것입니다. 제가 아는, SAT에 대한 가장 좋은 비유는 다음과 같습니다. [ 횃불을 켠 다음, 당신이 테스트 하려는 두 Shape를 다른 각도로 비춘다고 상상해 보세요. 어떤 그림자의 형태가, 그 두 Shape 바로 뒤의 벽에 나타날까요? ] 만약 당신이 그 Shape들 주위를 돌면서 테스트 해보고, 그 그림자들 사이에서 아무런 간격(gap)을 발견하지 못한다면, 그 두 Shape는 틀림없이 접촉하고 있을 것입니다. 반대로 만약 간격을 찾는다면, 분명히 접촉하지 않은 상태일 것입니다. Programming의 관점에서, 이는 어~엄청 많...
[원문] http://www.gamasutra.com/view/feature/131790/simple_intersection_tests_for_games.php?page=1 당신의 차가 시속 180마일로 finish line을 통과하든, 총알이 당신 절친의 가슴을 꿰뚫든, 모든 게임의 Object Intersection에서는 충돌탐지를 사용합니다. 이 기사는 대부분의 형상(Shape)에 활용되는 몇가지 간단한 Intersection Test를 소개합니다. => [Sphere, Box] Sweep Tests for Moving Objects Collision Detection의 가장 공통적인 접근법은 매 Frame이 끝날 때, 두 물체가 Overlap되는지를 테스트 하는 것입니다. 문제는 이 방법이 두 대상이 서로 빠르게 움직이면서 교차할 때, 탐지하지 못할 수도 있다는 것입니다. 이 문제를 피하기 위해, 물체들의 궤적을 작게 분할한 다음, 매 Point에서 Check 하는 방법을 사용할 수 있습니다. 하지만 이 경우 물체의 (Frame 사이) 이동 간격이 넓을 경우, 너무 비싼 비용을 지불해야 합니다. 반면에, Sweep Test는 효율적으로 (물체가) Overlap되는 시간 간격을 결정할 수 있고, 이는 Subdivision 알고리즘에서 최적의 시작점으로 이용될 수 있습니다. A Sphere-Plane Sweep Test [Figure1. 평면을 통과하는 구] 위의 그림은, 평면을 빠르게 가로지르는 구의 예를 보여줍니다. 이는 점 C 0 가 평면의 positive side에, 점 C 1 가 negative side에 있는 것으로 확인할 수 있습니다. 일반적으로, 구가 (Frame의 어느 시점에) 평면을 가로지를 때, d0 > r 이고 d1 < r 입니다. (r은 구의 반지름, d0과 d1은 점 ...
댓글
댓글 쓰기