2013-11-09 5 views
0

다음과 같은 문제가 있습니다. 문자를 움직이는데 총알 물리학을 사용하고 싶습니다. 지금까지 나는 점프에 심각한 문제가있다. 내가 땅에 떨어지면 몸 (캐릭터)이 2 밀리 초 동안 땅에 떨어지는 것이다. 그는 더 오랫동안 떨어질수록 더 많이 가라 앉습니다. 임의 임계 값이 0 인 20 개의 중력, 실린더 모양 및 지상 기준면을 사용합니다. 이 문제를 해결할 방법이 있습니까?bulletphysics body가 바닥을 통과합니다.

답변

1

개체가 각 시뮬레이션 단계에서 너무 빠르게 움직이는 것처럼 들립니다. 이 결과로 두 개체가 과도하게 침투 할 수 있습니다. 제공된 캐릭터 컨트롤러 코드의 경우 더 이상 관통하지 않을 때까지 역방향 충돌을 유발 한 객체를 이동시키기 위해 호출되는 recoverFromPenetration이 있습니다 (역방향 폴리곤의 법선으로부터 계산 된 것으로 정의됩니다).

void btKinematicCharacterController::preStep ( btCollisionWorld* collisionWorld) 
{ 

     int numPenetrationLoops = 0; 
     m_touchingContact = false; 
     while (recoverFromPenetration (collisionWorld)) 
     { 
       numPenetrationLoops++; 
       m_touchingContact = true; 
       if (numPenetrationLoops > 4) 
       { 
         //printf("character could not recover from penetration = %d\n", numPenetrationLoops); 
         break; 
       } 
     } 

     m_currentPosition = m_ghostObject->getWorldTransform().getOrigin(); 
     m_targetPosition = m_currentPosition; 
//  printf("m_targetPosition=%f,%f,%f\n",m_targetPosition[0],m_targetPosition[1],m_targetPosition[2]); 


} 

그것은이 4 번을 시도하고 침투가 해결되지 않는 경우 복구 코드가 실패하고 개체가 여전히 서로를 관통하여 종료됩니다. 이 컨트롤러 코드는 프로덕션 코드가 아니라 오히려 사용자 정의 및 개발을위한 시작점과 프레임 워크입니다. 그것의 목적을 꽤 잘 처리하지만 당신이 발견 한 바에는 한계가 있습니다.