2010-12-13 1 views
1

경험에 의한 충돌 감지 학습에 어려움을 겪고 있습니다. 나는 Minecraft라는 박스 게임을 만들고 있으며, 충돌 탐지를 구현하는 단계에 있습니다.C++ 3D 완벽한 충돌 감지

모든 것이 내 자신의 충돌 감지기를 만들고 가능한 한 가벼운 큐브로 구성되어 있기 때문에 x 축과 y 축을 모두 수행했습니다.

"픽셀 완벽"충돌을 만드는 방법이 있습니까? 즉, 플레이어의 경계 상자 (또는 원)가 충돌로 등록 된 상자를 터치 할 때입니까? 그것은 기본적으로 특정 여백 내에서 충돌을 감지

if(-TOUCH_DISTANCE-1 < yPlayer-yBox && yPlayer-yBox < TOUCH_DISTANCE-1) 
{ 
    collisionNorth = true; 
} 
if(-TOUCH_DISTANCE+1 < yPlayer-yBox && yPlayer-yBox < TOUCH_DISTANCE+1) 
{ 
    collisionSouth = true; 
} 

그리고 내가 :(좋아하지 않는 오류를 의미하는 "충돌 벽을 상쇄 +/- 1을 주목하라 : 지금이 내가 한 것입니다. "

더 낮은 속도에서 작동하지만, 일단 속도 변화를 일으킨 다음에는 너무 빨라서 오른쪽으로 넘어가므로 충돌을 더 이상 감지 할 수 없습니다. 입방체를 통해 ... 증명할 수있는 방법이 있습니까?

이것은 특히 플레이어가 고속으로 떨어지는 경우 z 축에서 성가시다. 존경할만한 충돌 마진을 정의 할 때 그것은 궁극적으로 불쾌 해 보일 것입니다 (플레이어 절반은 묻혔습니다).

답변

3

이산 수학을 사용하여 객체의 경로를 모델링하는 문제 중 하나를 확인했습니다. 시간이 t 일 때 객체는 "여기"이고 시간은 t + delta입니다. 실제로는 그 사이의 점을 통과하지 않고 "거기"입니다.

델타를 줄이면 더 많은 정확도를 얻을 수 있지만 궁극적으로 그 시간 간격에서 계산할 수있는 한계에 도달하게됩니다.

비교적 큰 시간 델타 및 느슨한 경계 상자를 사용하여 충돌이 발생하는 것을 감지 할 수 있으면 정확도를 높일 수 있지만 다시 한도를 초과 할 것입니다.

연속 모델로 변환하는 것이 도움이 될 수 있지만 더 많은 계산 능력이 필요할 수 있습니다. 당신은 당신의 물건이 가까이있을 때 이것을 바꿀 수있어서 항상 그렇게하지는 않습니다.

죄송합니다. 명확한 답변이 없으므로 포인터 만 사용하십시오.

+0

음, 2 일간 상당의 코드가 있습니다. 연속 모델은 정확한 것일뿐만 아니라 (이 경우) 비용도 저렴합니다. – Solenoid

2

일반적으로 수행해야 할 작업은 개체의 이전 위치와 현재 위치를 추적하는 것입니다. 그런 다음 업데이트하면 개체가 '순간에 교차'하는 것이 아니라 시간대에 개체가 교차하는지 확인할 수 있습니다.