다음과 같은 문제가 있습니다. 문자를 움직이는데 총알 물리학을 사용하고 싶습니다. 지금까지 나는 점프에 심각한 문제가있다. 내가 땅에 떨어지면 몸 (캐릭터)이 2 밀리 초 동안 땅에 떨어지는 것이다. 그는 더 오랫동안 떨어질수록 더 많이 가라 앉습니다. 임의 임계 값이 0 인 20 개의 중력, 실린더 모양 및 지상 기준면을 사용합니다. 이 문제를 해결할 방법이 있습니까?bulletphysics body가 바닥을 통과합니다.
0
A
답변
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 번을 시도하고 침투가 해결되지 않는 경우 복구 코드가 실패하고 개체가 여전히 서로를 관통하여 종료됩니다. 이 컨트롤러 코드는 프로덕션 코드가 아니라 오히려 사용자 정의 및 개발을위한 시작점과 프레임 워크입니다. 그것의 목적을 꽤 잘 처리하지만 당신이 발견 한 바에는 한계가 있습니다.