slab은 두 평행한 평면 사이에 있는 공간을 말한다.
k-dop은 미리 정해진 방향으로 slap들을 정의해서 boundng volume을 정의한다.
예를들어 AABB Box는 6-DOP인데 (1, 0, 0), (0, 1, 0), (0, 0, 1) 방향에 수직인 3개의 slab들로 정의된다.
k-dop 형식으로 정해진 bouding volume이 있을 때, 각각의 slab쌍에 대해 검사를 해서 하나라도 겹치지 않으면 충돌되지 않는다.
6-DOP인, AABB끼리의 겹침검사를 예를들어보면
bool TestOverlap(const DOP6& b0, const DOP6& b1)
{
for(int i = 0; i < 3; ++i)
{
if(b0.min[i] > b1.max[i] || b1.min[i] > b0.max[i]) return false;
}
return true;
}
k-DOP을 이용해서 간단히 Convex Volume을 만들 수 있다.
k개 만큼의 평면을 구하고 그 평면으로 convex volume을 생성한다.
volume을 만들 떄 처음에는 AABB를 구하고 convex volume을 이루는 평면들로 잘라냈었는데, 그러면 k개보다 더 많은 폴리곤이 생성된다.
그래서 기준 평면들에 대한 최소, 최대값으로 사각형태의 폴리곤을 만든다음, 나머지 평면들로 잘라내는 형식으로 폴리곤을 생성했다.