티스토리 뷰

0. 들어가기 앞서

 이전 포스팅에서 Collision Detection의 기준이 되는 Bounding Box의 종류(AABB, OBB, Sphere)와 각 Bounding Box의 특징에 대해서 알아보고, VTK를 활용해 가시화까지 해보았습니다. 

https://mathmakeworld.tistory.com/102

 

TMI(Triangle Mesh Information) Project #6.1 - Collision Detection 에 사용되는 여러가지 Bounding Box, Sphere

이전 포스팅에서는 VTK Collision Detection Filter를 활용하여 Collision을 Check하고 Rendering 해보았습니다. https://mathmakeworld.tistory.com/99 TMI(Triangle Mesh Information) Project #5 - vtk Collisi..

mathmakeworld.tistory.com

이번 포스팅에서는 AABB와 Sphere Bounding Box의 Collision Check를 하고 Collision 됐을 때 Bounding Box의 색을 변경해 가시화 해보도록 하겠습니다.

 

1. AABB

  이전 포스팅에서 AABB는 min, max, center 값을 가진다고 했습니다. 그러면 Collision이 됐는지 안됐는지 판단을 어떻게 할까요? 설명하기 편하게 2차원에서 이야기해보도록 하겠습니다. 아래 그림을 보면 두 AABB가 있습니다.

2개의 AABB

 현재 두 AABB는 Collision이 된 상태입니다. 그림으로 보면 간단하게 확인할 수 있지만 컴퓨터는 사람이 아니기 때문에 수식으로 알려줘야합니다. AABB Collision Check를 먼저 말로 풀어서 써보면 아래와 같습니다.

 

아래 조건 중 하나라도 만족하면 두 AABB는 충돌 상태가 아니다.

 - x축

  - 빨간 AABB의 max.x 값보다 초록 AABB의 min.x 값이 크다.

  - 빨간 AABB의 min.x 값보다 초록 AABB의 max.x 값이 작다. 

 - y축

  - 빨간 AABB의 max.y 값보다 초록 AABB의 min.y 값이 크다.

  - 빨간 AABB의 min.y 값보다 초록 AABB의 max.y 값이 작다.

 

AABB는 각 축에 정렬되어 있으므로 x, y 축만 비교해주면 되기 때문에 간단합니다! 3차원은 여기에 z축만 추가됐다고 보면 될 것 같습니다. 코드로 표현하면 아래와 같이 됩니다.

min max 값을 활용한 AABB Collision Detection

저는 관리를 용이하게 하기 위해 AABB class를 만들어 Collision Check를 할 수 있게 했습니다.

AABB Class

아래 이미지는 위에서 만든 AABB Class를 활용하여 Collision Check를 하는 Code 입니다.

AABB Class를 활용한 Collision Detection

 

2. Sphere

  Sphere는 center 값과 Radius 값을 가집니다. Sphere Collision도 설명하기 편하게 2차원에서 이야기해보도록 하겠습니다. 아래 그림을 보면 두 Circle이 있고, 각각 center값과 radius를 가지고 있습니다.

2개의 Circle

 현재 두 Circle은 Collision이 되어 있는 상태입니다. Circle의 Collision Check는 아래와 같이 합니다.

 1. 두 Circle의  Center간의 거리 distance를 구한다.

 2. radius1 + radius2 보다 distance가 짧으면 Collision이 된 상태

 

 즉, (radius1 + radius2 >= center간의 거리)를 만족하면 Collision이 되었다고 판단하게 됩니다.

 3차원은 마찬가지로 z축만 추가하면 됩니다.

 

코드로 표현하면 아래와 같이 됩니다. SPhere도 AABB와 동일하게 Class를 생성하여 Collision Check 함수를 만들어 주었습니다.

Sphere Class
Sphere Class를 활용한 Collision Detection

 

3. Test Code

 지금까지 설명한 내용들을 토대로 Collision이 되면 Bounding Box가 빨간색이 되도록 Code를 짜보았습니다. 아래 이미지는 두 Cat Model에 대해서 AABB를 생성하고 Collision이 되어 빨간색으로 표현된 상태입니다.

 아래 영상은 Example_3_BBoxCollision을 Test한 결과입니다. 실제로 받아서 실행해보시면 여러 Key를 가지고 Collision Test를 해보실 수 있습니다.

Blog_CollisionDetection.mp4
4.74MB

 Key 설명은 ReadMe에 있으니 확인바랍니다.

 

 

코드는 Git에 계속해서 Upload 하고 있으니 필요하신 분들은 다운받아 쓰시면 될 것 같습니다! 

https://gitlab.com/bshong2850/blog_vtk

 

ByeongSun Hong / Blog_VTK

GitLab.com

gitlab.com

 

오늘은 AABB와 Sphere Bounding Box의 Collision Detection에 대해 알아보았습니다. 다음 포스팅에서는 OBB Collision Detection에 대해 알아보도록 하겠습니다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함