내 그래픽 엔진에 충돌 감지 시스템을 구현하고 싶습니다.3D 공간에서 두 상자 사이의 교차점
일반적인 방법인지는 모르지만 제 생각은 3D 상자 내에서 솔리드 오브젝트 (예 : 메쉬 또는 카메라)를 바인딩하는 것이 었습니다. 그러면 3D 상자 내에서 훨씬 정확한 결과를 얻을 수있었습니다. 구체.
이 상자는 세계에 바운딩 박스를 변환 한 후 팔 개 정점
x0 = min(vertices.x)-off // parsing mesh's vertices for the minimum x
y0 = min(vertices.y)-off
z0 = min(vertices.z)-off
x1 = max(vertices.x)+off // off avoids 2D bounding on 2D objects
y1 = max(vertices.y)+off
z1 = max(vertices.z)+off
boundingBox[0] = vec3(x0, y0, z0);
boundingBox[1] = vec3(x0, y1, z0);
boundingBox[2] = vec3(x1, y0, z0);
boundingBox[3] = vec3(x1, y1, z0);
boundingBox[4] = vec3(x0, y0, z1);
boundingBox[5] = vec3(x0, y1, z1);
boundingBox[6] = vec3(x1, y0, z1);
boundingBox[7] = vec3(x1, y1, z1);
에 의해 정의된다, 나는 돈을 그 두 가지 사이의 교차가 있는지 확인하는 방법을 찾고,하지만 난거야 좌표 선형 대수학으로 그것을하는 방법을 안다.
는 내가 모든 상자가 XZ 평면에 평행 있다고 확신했다 경우 단순히 이런 BOX2의 최소/최대 좌표에 대한 BOX1의 모든 정점을 확인 수 있다고 생각 :
for(int i = 0; i < 8; i++) {
if(box1[i].x >= box2.minX && box1[i].x <= box2.maxX) &&
(box1[i].y >= box2.minY && box1[i].y <= box2.maxY) &&
(box1[i].z >= box2.minZ && box1[i].z <= box2.maxZ) {
// collision here
}
}
를하지만이 있습니다 메쉬가 회전되었을 수 있기 때문에 작동하지 않을 것입니다. 사용할 수있는 수학 공식이 있습니까? 두 배향 경계 박스 (또는 두 개체간에 더 일반적인) 사이
도움이됩니다. - http://gamedev.stackexchange.com/questions/25397/obb-vs-obb-collision-detection – raveesh