AABB 계산 기본 아이디어
AABB 계산은 object를 구성하는 점들을 순회하면서 x축, y축, z축의 최대최소를 구하면 됩니다.
아래와 같이 AABB가 계산되면 최소점은 (0,0,0)이고 최대점은(10,10,10)이 됩니다.
이처럼 box는 점 8개 모두 이용해서 정의해도 되지만, AABB와 같이 각축에 box가 정렬되어 있다면 대각에 해당하는 두 점으로 box를 정의할 수 있습니다. box의 중심점은 (min+max)/2가 됩니다.
어떤 형상의 특징을 파악을 위해 AABB를 사용할 수 있습니다. 만약 아래와 같이 cylinder의 AABB를 계산했다고 하면 cylinder 높이는 zmax-zmin, 직경은 ymax-ymin 또는 xmax-xmin으로 계산할 수 있습니다.
이렇게 어떤 형상이 3축에 정렬되어 있을 때 특징을 계산하기 위해 AABB를 활용할 수 있습니다. 축에 정렬되지 않았다면 OBB(Oriented Bounding Box)를 사용해야 하겠죠.
그리고 AABB를 이용해서 두 물체의 충돌을 빠르게 계산할 수 있습니다. 두 물체의 AABB가 계산되면 각 축에 최대 최소 영역이 겹치는지를 판단해서 충돌을 판단할 수 있습니다. 각 축이 모두 겹쳐야 충돌로 판단합니다.
아래 그림은 2차원에서 한축만 겹칠 경우와 2축 모두 겹칠 경우를 비교한 그림입니다.
아래는 AABB와 OBB의 차이에 대한 글과 OpenMesh를 이용하여 AABB를 계산하는 코드가 있으니 참고하시기 바랍니다.
2023.12.11 - [3D Algorithm] - AABB OBB 차이와 의미
2024.11.25 - [OpenMesh] - Bounding Box
'3D Algorithm' 카테고리의 다른 글
Morton Code (0) | 2024.09.04 |
---|---|
CAD Revolve (1) | 2024.09.03 |
임의의 점 직육면체 외부/내부 판별(Point Inside Cube) (0) | 2024.06.13 |
PLY File Format(포맷 정보) (0) | 2024.06.06 |
임의의 점 원기둥 내부/외부 판별 코드(c++) (0) | 2024.06.03 |