나는 (그래서 기본적으로 OpenGL을, openTK에) 간단한 3D 환경을 개발하기 위해 노력하고 간단한 충돌 감지를 구현하고 있습니다. 나는 바운딩 큐브와 삼각형과 쿼드로 가득 찬 세상을 가질 카메라 객체를 가질 것이다. 나는 경계 큐브 (또는 경계가 쉽게인지 영역) 및 다각형의 목록을 제공하고있어 경우C#을 간단한 3D 충돌 감지
기본 충돌 감지를 할 수있는 신속하고 더러운 방법은 무엇입니까? 간단한 경계 상자 충돌에 대한
나는 (그래서 기본적으로 OpenGL을, openTK에) 간단한 3D 환경을 개발하기 위해 노력하고 간단한 충돌 감지를 구현하고 있습니다. 나는 바운딩 큐브와 삼각형과 쿼드로 가득 찬 세상을 가질 카메라 객체를 가질 것이다. 나는 경계 큐브 (또는 경계가 쉽게인지 영역) 및 다각형의 목록을 제공하고있어 경우C#을 간단한 3D 충돌 감지
기본 충돌 감지를 할 수있는 신속하고 더러운 방법은 무엇입니까? 간단한 경계 상자 충돌에 대한
좋아 어떤 도움을위한
덕분에, 나는 BoundingBox
객체를 받아 그것이 BoundingBox
의 현재 인스턴스 내부에 있는지 확인합니다 다음과 같은 방법을 썼다.
테두리 상자는 테두리 상자의 가운데에 대한 Point3D
개체 (Point
클래스와 동일하지만 Z 좌표가 있음)와 상자의 높이, 너비 및 깊이로 구성됩니다. 그 4 개체, 그것은 왼쪽 (분 X), 우 (최대 X), 아래쪽 (최소 Y), 최고 (최대 Y), 전면 (최소 Z)를 상자로 돌아 가기 (최대 Z)을 (상자는 계산 축 정렬. 이것은 단순한 충돌입니다.) 한 상자가 다른 상자 안에 있는지 감지하고, 그렇다면 상자를 바깥쪽으로 이동하는 방법입니다. meshData
장면에서 기하학의 어떤 종류이고 camera
현재 사용자의 관점에 대한 개체입니다 meshData.Box.Intersection(ref camera.box);
:
public void Intersection(ref BoundingBox box)
{
double lr = Left - box.Right;
double rl = box.Left - Right;
double bt = Bottom - box.Top;
double tb = box.Bottom - Top;
double fb = Front - box.Back;
double bf = box.Front - Back;
if (lr > 0 || rl > 0 || bt > 0 || tb > 0 || bf > 0 || fb > 0)
return;
double max = Math.Max(lr, Math.Max(rl, Math.Max(bt, Math.Max(tb, Math.Max(bf, fb)))));
if (_complex)
{
if (ComplexIntersection(ref box))
return;
}
if (max == lr)
box.Center.X += max;
else if (max == rl)
box.Center.X -= max;
else if (max == bt)
box.Center.Y += max;
else if (max == tb)
box.Center.Y -= max;
else if (max == fb)
box.Center.Z += max;
else if (max == bf)
box.Center.Z -= max;
}
당신은 같은 일을하여 호출합니다.
희망이 다른 사람에 유용합니다!