Neste ponto, a plataforma e a linguagem de programação não importam. Gostaria apenas de saber se existe algo disponível para isso. Qualquer ajuda é apreciada.
Neste ponto, a plataforma e a linguagem de programação não importam. Gostaria apenas de saber se existe algo disponível para isso. Qualquer ajuda é apreciada.
Respostas:
Veja o que os Q-Games usaram para o Pixeljunk Shooter. É um jogo 2D com física de fluidos bastante envolvida. Não tenho certeza se eles usaram um mecanismo de física caseiro ou de middleware, mas as informações provavelmente estão disponíveis em algum lugar.
Bem, eu não olhei para isso, mas sei que quase qualquer mecanismo de física pode imitar a idéia. Box2D, etc.
Basicamente, tem partículas que saltam ao redor, fora de superfícies e umas às outras (mais rápido para gases), mas também lhes confere um efeito de gravidade constante (os líquidos teriam o mesmo, mas alguns gases você pode querer subir lentamente).
Se você ligar as partículas externas, obterá uma forma poligonal que representa a massa
OU
se você simplesmente desenhar um gráfico de pixel ou partícula sobre cada partícula, poderá obter um efeito de nuvem para a massa.
A única biblioteca que eu poderia criar que lida especificamente com fluidos é o Fluidic . É bastante alfa e só tem um lançamento, no entanto. A biblioteca de física Bullet suporta 'hidrodinâmica de partículas suavizadas', uma técnica usada para modelar fluidos. Embora a biblioteca seja voltada para 3D, você pode aplicar restrições a um eixo para fazê-la funcionar em 2D.
Minha recomendação seria, como já mencionei em alguns comentários em outras respostas, usar um mecanismo de física padrão como Box2D ou Chipmunk e usar vários círculos para modelar a água (com gravidade) ou o gás (sem gravidade) e combiná-los. em um corpo de água ou gás. Você pode aplicar algumas restrições nos corpos individuais para torná-los "agrupados", para simular a viscosidade. Dê uma olhada neste vídeo para ver como os corpos individuais (modelados como quadrados no vídeo) funcionam juntos. Observe, no entanto, a técnica usada neste vídeo não é a mesma mencionada neste parágrafo. Você pode usar o vídeo para ter uma idéia de como os círculos interagem entre si e tentar imitar isso com as restrições presentes na biblioteca de física usada.
A parte interessante vem quando você deseja combinar vários círculos no corpo de água. A solução mais direta que posso encontrar é desenhar cada círculo como um metaball para que eles apareçam como parte de um corpo maior. Você pode encontrar a matemática e algum código de exemplo por trás desses corpos aqui .
Faz alguns anos que essa pergunta foi publicada, mas me deparei com ela durante a pesquisa, então pensei em atualizá-la.
O Google lançou o LiquidFun (código aberto) para o sistema Box2D. Ele tem algumas limitações, mas é uma maneira rápida de começar com partículas líquidas, areia, etc., com desempenho bastante decente.
https://github.com/google/liquidfun
O PixelJunk tem uma ótima abordagem, mas é uma biblioteca privada. Eles compartilharam um nível incrível de detalhes em sua palestra no GCD 2010.