2009-08-23 9 views
2

OgreMOC을 사용하여 물리 시뮬레이션을 작성했습니다.메쉬와 구 사이의 충돌 점 감지?

저는 카메라의 위치에서 촬영하는 구를 가지고 있으며 카메라의 앞으로 벡터를 사용하여 카메라가 향하는 방향으로 이동합니다.

내 구체와 다른 메쉬 사이의 충돌 점을 어떻게 감지 할 수 있는지 알고 싶습니다.

MOC 또는 OGRE를 사용하여 두 메시 간의 충돌 지점을 어떻게 확인할 수 있습니까?

업데이트 : 앞서 언급 했어야합니다. 제 자신이 개발해야하는 제 3 자 물리 라이브러리 (uni 프로젝트)를 사용할 수 없습니다.

답변

2

필자는 특수화 된 물리 라이브러리를 사용하는 것이 가장 좋을 것이라고 생각합니다.

그렇습니다. 이 문제에 대해 생각해 보면 그다지 어렵지 않다고 생각합니다.

구의 중심과 반경이 있습니다. 메쉬의 모든 점에 대해 다음을 수행하십시오.

  1. 점이 구 내부에 있는지 확인하십시오.
  2. 는 이전에 발견 지점보다 중앙 (있는 경우)가 않는 경우
  3. 에 가까운 경우가 확인 않을 경우 ... 충돌 지점 물론

,이 루틴 등이 포인트를 저장 상당히 느릴 것입니다. 그 속도를 몇 가지 : 대한

  1. 첫 번째 사소한 거부 메쉬의 경계 영역이 거리를 검사 할 때
  2. 가 squareroots을 CALC하지 않는 충돌하는 경우, 먼저 제곱 길이를 사용하여 ... 참조 대신에. (더 빨리)
  3. 대신 메쉬의 모든 지점을 비교가 신속하게 포인트의 그룹을 배제하기 위해 메쉬에 대한 차원 공간 분할 알고리즘 (쿼드 트리/BSP)를 사용

아 ... 그리고 이 루틴은 구가 너무 빠르게 이동하지 않는 경우에만 작동합니다 (r 메쉬에 엘레멘트). 속도가 매우 빠르며 초당 X 번 샘플링하면 모든 충돌없이 구가 메시를 통해 오른쪽으로 흐를 가능성이 있습니다. 이를 극복하기 위해서는 기본적으로 구형을 튜브로 만드는 '스윕 볼륨'을 사용해야합니다. 수학을 기하 급수적으로 복잡하게 만듭니다.

+3

메쉬가 구형에 비해 큰 경우 연결 가장자리가 구와 교차하는 구의 바깥쪽에 2 포인트를 얻을 수 있습니다. 물론, 당신이 당신의 맥락에서 이것을 얻지 못한다면, 당신은 point-in-sphere 테스트를 할 수 있습니다. – geofftnz

8

여기서 허용되는 해결 방법은 작동하지 않습니다. 메쉬 밀도가 일반적으로 충분히 높아서 메쉬의 두 점이 충돌 구체의 직경보다 멀리 떨어져 있지 않은 경우 일종의 작업 만 수행합니다. huuuge 큐브 메쉬에서 임의의 벡터에서 단거리에서 시작된 작은 구체를 상상해보십시오. 큐브 메쉬는 8 개의 버텍스 만 있습니다. 큐브가 실제로이 8 개의 버텍스 중 하나에 부딪 칠 확률은 얼마입니까?

이것은 실제로 다각형 충돌 당 수행해야합니다. 다각형과 구의 교집합을 확인할 수 있어야합니다 (또한 언급 된 중계기와 같은 터널링을 피하려면 실린더가 필요합니다). 이 온라인 및 서적 형식의 리소스는 매우 많지만 http://www.realtimerendering.com/intersections.html은 유용한 출발점이 될 수 있습니다.

최적화에 대한 의견은 훌륭합니다. 조기 아웃 기회 (아마도 바운딩 구 또는 메쉬의 축 정렬 볼륨에 대한 빠른 체크가 필수적입니다). 바운더리 안에 있다고 판단한 후에도 잠재적 인 후보자 목록에서 폴리곤 (너무 멀리 떨어져 있거나 잘못된 방향을 향하고 있음)을 제거 할 수있는 것이 좋습니다.

+0

이것을 지적 해 주셔서 감사합니다. 나는 그 사건을 완전히 놓쳤다. 그러나 메시와 구의 크기가 비슷하거나 구가 더 큰 솔루션의 경우 제대로 작동 할 수 있습니까? – Toad

+0

해당 솔루션의 @Toad 경계 구와의 교차점이 작동 할 수 있습니다. – AgentFire