풀 게임을 올바르게 시뮬레이션 할 수있는 물리 엔진 권장 사항 [닫은]


13

나는 게임과 같은 수영장 게임을 만들고 있습니다. 이 게임에는 올바른 (또는 매우 정확한) 반사 바운스가 필요합니다. Box2DBullet Physics를 시도 했지만 둘 다이 문제가 있습니다.

삽화

이 이미지 위에 벽이 있으면 풀 게임에서 실제 공의 코스가 빨간 선으로 표시됩니다. 그러나 엔진은 종종 녹색 라인 코스를 보여줍니다. 특히,

  1. 이것은 천천히 움직이는 공이 벽에 부딪친 후에 발생합니다.
  2. 때로는 빠르게 움직이는 공이 갑자기 느려집니다.

이러한 문제없이 가능한 한 정확하게 풀 게임을 시뮬레이션 할 수있는 물리 엔진을 찾고 있습니다. 몇 가지 추천을받을 수 있습니까? 이제 Newton Game Dynamics를 파고 있지만 엔진이 원하는 것을 보여줄지 확신하지 못합니다. 나는 고려하고 피직스 다음 시험으로 엔진을, 아무것도 작동하지 않는 경우 내 자신을 확인해야합니다. 그러나 시간이 오래 걸리는 것이 분명하므로 그렇게하지 않기를 바랍니다. 내 시간을 절약하면 대단히 감사하겠습니다. 물론 Box2D / Bullet Physics 솔루션도 환영합니다.

iOS에서 C / C ++ / Objective + C로 작업하고 있습니다.


Box2D로 구성을 첨부합니다.

  • 정적 상자 모양
  • 선형 / 각도 댐핑 = 0.1
  • 배상 = 1.0
  • 마찰 = 100
  • 밀도 = 10
  • 총알 = 거짓
  • 고정 회전 = 거짓
  • 관성 스케일 = 1.0

불알

  • 동적 구 모양
  • 선형 / 각도 댐핑 = 0.1
  • 배상 = 1.0
  • 마찰 = 100
  • 밀도 = 20
  • 글 머리 기호 = true
  • 고정 회전 = 거짓
  • 관성 스케일 = 1.0

3
엔진이 잘못되지 않았을 가능성이 있지만 속성을 설정하지 않았거나 어떻게 든 잘못한 것입니다.
공산주의 오리


나는 밀도 1과 마찰 0.0 ~ 0.1로 테스트했는데 계속 붙어 있습니다.
Eonil

답변:


8

몇 가지 솔루션.

  1. Box2D의 경우, 설정 b2_velocityThreshold에서 b2Settings.h파일. 내 경우에는 그것을 설정 0.0f하고 작동했습니다! 질량, 마찰, 감쇠는 문제가되지 않았습니다. 자세한 내용은이 토론 스레드를 확인하십시오. http://www.box2d.org/forum/viewtopic.php?f=3&t=6906&p=30782#p30782

  2. 다른 물리 엔진을 사용합니다. Newton Game Dynamics 는 기본적으로 이것을 올바르게 수행하도록 구성했습니다. 그러나 iOS에서 Newton 역학을 사용하는 것은 가능하지만 다른 것보다 다소 어렵습니다. iOS에 대해 며칠 동안 구성했습니다.

BulletPhysics 포럼에도 질문하고 있습니다. 솔루션을 받으면 이것을 업데이트하겠습니다.

-- (편집하다) --

Bullet에는 몇 가지 임계 값 속성이 있지만와 동일한 항목을 찾을 수 없습니다 b2_velocityThreshold.

이것은 비슷해 보이지만 제대로 작동하지 않았습니다.

btRigidBody->setContactProcessingThreshold(0.0f)

6

Box2D는 원하는 작업을 수행하지만 벽 및 볼 고정구에 대한 복원 (바운스) 상수를 설정해야합니다. 풀 게임의 경우 완벽한 복원력과 높은 마찰력으로 시작하지만 선형 및 각진 댐핑으로 시작하여 조정해야합니다.


며칠 동안 많은 구성을 시도했지만 여전히 발생합니다. 하나의 좋은 예를 얻을 수 있습니까?
Eonil

3
Box2D의 밀도와 마찰 값은 매우 커 보입니다.

4

물리 엔진에는 바운스 임계 값이 있습니다. 엔진 중 하나에서 어떻게해야할지 모르겠지만 임계 값을 너무 높게 설정하면 특정 속도에서의 영향을 무시하게됩니다. 바운스 임계 값을 낮추면 더 낮은 속도로 바운스됩니다.

다른 물리 엔진을 요청했지만, 내가 알고있는 모든 물리 엔진은 바운스 임계 값을 사용하여 물체가 서로 위에있을 때 흔들림을 방지합니다. 따라서 좋은 물리 엔진을 제안하면 좋은 물리 엔진이이 효과를 갖기 때문에 비생산적 일 것입니다.


0

나는이 문제가 있었고 해결책은 완벽한 회복을 제공했다.

따라서 모든 객체의 경우 sqrt는 0.5입니다. sqrt (r1 * r1 + r2 * r2) == 1이므로 완벽한 상황입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.