2016-10-29 8 views
0

현재 물리 엔진으로 Box2D 또는 Chipmunk2D를 사용할 수있는 2D 물리 추상화 레이어에서 작업 중입니다. 처음에는 Chipmunk2D를 사용하고 지금은 Box2D를 구현하고 있습니다. 내가 겪었던 문제 중 하나는 Box2D의 최대 속도 (b2_maxTranslation에 정의 됨)였습니다. 이 문제를 해결하기 위해 저는 Box2D 유닛에 더 잘 맞도록 월드를 확장하기로 결정했습니다.Scaling Physics World

현재 내가 상수 요인으로 축소하는 해요 :

  • 힘 (다각형 고정 정의와 원 반경 포함)

    • 위치를
    • 충동 (b2Body :: ApplyForce를 호출하기 전에()를 호출하기 전에 b2Body :: ApplyLinearImpulse)

    조명기를 정의하기 위해 밀도를 사용하고 있기 때문에 본체 질량도 줄일 수 있습니다.

    내가 알아챈 것은 이것이 작동하지 않는다는 것입니다. 힘을 가할 때마다 몸은 눈금이 높을 때보 다 훨씬 빠르게 움직입니다.

    시체를 올바르게 업데이트하기 위해 저울에 필요한 다른 것이 있습니까? 아니면 다른 방법으로 충격과 힘을 조정해야합니까?

  • 답변

    0

    이 형상을 확장 규모의 X를 감안할 때, 나는 (내가 댐핑 효과를 확장 귀찮게하지 않았다) 다음을 수행 결국 :

    속도 (SetLinearVelocity) - 선형

    포스 (ApplyForce) - 큐빅

    위치 (모든 고정 데프 CreateFixture) - 선형

    질량 (GetMass) -

    중력 광장 (SetG 축) - 선형

    충격 해결 (PostSolve WorldManifold.) 정상 - 큐빅 역

    어디

    • 선형 = X * 설계 인자
    • 제곱 = X * X * 요소를 설계
    • 세제곱 = X * X * X * 설계 인자

    나는 여러 가지 테스트를 이러한 요소들로 수행했으며, 선형 속도뿐만 아니라 각속도를 유지하는 데는 문제가 없었습니다. 참조 (소스 코드는 더 이상 유지되지 않음)에 대해서는 https://bitbucket.org/Kipt88/polymorph/src/b4d29e2434a2ed1eda2183f9e16f4782c40ee026/modules/physics2d/files/source/box2d/?at=master을 참조하십시오.

    0

    b2_maxTranslation 설정을 피하기 위해 전 세계를 확장하지 않을 것입니다. 모든 물리 단위를 MKS 단위로 정규화하고 b2_maxTranslation 설정을 높이거나 단계 기능의 빈도를 높입니다. 나는 최대 속도를 두 배로 원한다면 예를 들어

    , 나도 두 배는 (2.0f에서 4.0f에) b2_maxTranslation 값에 컴파일 된 것, 또는 나는 두 배나 많은 단계의 방법을 실행하고 각이있을 것이다는의 절반을 시뮬레이션 나는 그렇지 않으면 시뮬레이션을 할 수있는 기간. 모든 유닛이 MKS로 표준화 되었기 때문에 Box2D는 그 유닛을 직접 가져 가며 Chipmunk도 그렇게 할 것입니다.

    그러나 MKS 단위로 조정 된 값을 사용하지 않은 엔진의 경우 MKS에서 해당 엔진의 단위로 값을 조정합니다.

    희망이 도움이됩니다.

    +0

    좋은 제안이긴하지만 답은 아니지만 값을 조정하는 방법을 알려주지 않습니다. 나는 내가 어떻게 그것을 끝내 었는지 보여주는 별도의 대답을 게시 할 것이다. –