태그 보관물: 2d

2d

유체와 가스를 모델링 할 수있는 2D 물리 엔진이 있습니까? [닫은]

이 시점에서 플랫폼과 프로그래밍 언어는 중요하지 않습니다. 도움을 주시면 감사하겠습니다.



답변

Pixeljunk Shooter에 사용 된 Q-Games를 살펴보십시오. 그것은 유체 물리학에 관여하는 2D 게임입니다. 그들이 자체 또는 미들웨어 물리 엔진을 사용했는지 확실하지 않지만 정보는 아마도 어딘가에있을 것입니다.


답변

글쎄, 나는 이것을 보지 못했지만 거의 모든 물리 엔진이 아이디어를 모방 할 수 있다는 사실을 알고있다. Box2D 등

기본적으로 파티클이 튀어 나오고 표면에서 서로 튀어 나오며 (가스의 경우 더 빠름) 또한 중력과 같은 일정한 중력을줍니다 (액체는 모두 같지만 일부 가스는 천천히 상승 할 수 있습니다).

외부 입자를 연결하면 질량을 나타내는 다각형 모양이됩니다.

또는

각 입자 위에 단순히 픽셀이나 입자 그래픽을 그리면 질량에 구름 효과를 얻을 수 있습니다.


답변

유체를 다루는 유일한 라이브러리는 Fluidic 입니다. 그것은 꽤 알파이며 하나의 릴리스 만 있습니다. 물리 라이브러리 Bullet 은 유체를 모델링하는 데 사용되는 기술인 ‘매끄러운 입자 유체 역학’을 지원합니다. 라이브러리는 3D에 맞춰져 있지만 한 축에 구속 조건을 적용하여 2D에서 작동하게 할 수 있습니다.

다른 답변에 대한 일부 의견에서 이미 언급했듯이 Box2D 또는 Chipmunk와 같은 표준 물리 엔진을 사용하고 물 (중력) 또는 가스 (중력 없음)를 모델링하고 이들을 결합하기 위해 여러 원을 사용하는 것이 좋습니다 하나의 물 또는 가스 몸체로. 개별 바디에 일부 구속 조건을 적용하여 함께 ‘뭉치 게’하여 점도를 시뮬레이션 할 수 있습니다. 한 번 봐 가지고 이 영상 (비디오에 사각형으로 모델링) 개별 기관이 함께 작동하는 방식을 볼 수 있습니다. 그러나이 비디오에 사용 된 기술은이 단락에서 언급 한 것과 동일하지 않습니다. 비디오를 사용하여 원이 서로 상호 작용하는 방식을 느끼고 사용 된 물리 라이브러리에있는 제약 조건으로이를 모방 할 수 있습니다.

흥미로운 부분은 여러 원을 수역으로 결합하려는 경우에 발생합니다. 내가 취할 수있는 가장 간단한 해결책은 각 원을 메타 볼로 그려서 더 큰 신체의 일부로 표시하는 것입니다. 이 본문 뒤에 수학과 예제 코드가 있습니다 .


답변

이 질문이 게시 된 지 몇 년이 지났지 만 검색하는 동안이 문제가 발생하여 업데이트하겠다고 생각했습니다.

Google은 Box2D 시스템 용 LiquidFun (오픈 소스)을 출시했습니다. 몇 가지 제한이 있지만 성능이 매우 좋은 액체, 모래 등의 입자를 빨리 시작할 수 있습니다.

https://github.com/google/liquidfun

PixelJunk는 훌륭한 접근 방식을 가지고 있지만 개인 라이브러리입니다. 그들은 GCD 2010에서 대화에서 놀라운 수준의 세부 사항을 공유했습니다.


답변