2011-08-05 18 views
7

Estoy buscando una forma de aproximar un volumen de fluido moviéndose sobre un mapa de alturas. La solución más fácil que se me ocurre es aproximarla como una gran cantidad de esferas no dibujadas, de pequeño diámetro (< 0.1m). Luego colocaría un plano visible que representa la superficie del agua en "la parte superior" de las esferas, en los lugares en los que llegaron a descansar. Que yo sepa, ningún motor de física administrada contiene un simulador de fluido incorporado, de ahí la pregunta.Simulando el flujo de fluido sobre un mapa de alturas

La implementación consistiría en el uso de un motor de física como JigLibX, que es capaz de simular el movimiento de las esferas. Para determinar la altura de los planos, estaba pensando en promediar la altura máxima de cada esfera que está en la capa superior de una agrupación.

No espero que el rendimiento sea excelente, pero ¿sería accesible en tiempo real? Si no, ¿podría usar esta simulación para precalentar las líneas de flujo?

Espero que esto tenga sentido, realmente quiero opiniones/sugerencias sobre si esto es factible, o si hay una mejor manera de abordar esto.

Gracias por cualquier ayuda, Venatu

(Si su, mi plataforma de destino relevante es XNA 4.0, usando C#. De Windows sólo en este punto en el tiempo, por lo que PhysX/Havok son posibilidades para la simulación, pero lo haría prefiera una solución administrada)

+0

Es posible que desee echar un vistazo a la investigación [que aparece en vterrain.org] (http://vterrain.org/Water/) Especialmente los trabajos sobre simulación de ríos. – Bart

+0

¡Estoy a punto de implementar algo exactamente como usted describe, con muchas esferas pequeñas! El plan es permitir que las esferas erosionen el paisaje, con la esperanza de cortar los valles de los ríos. –

Respuesta

2

No he visto dinámicas fluidas realistas en tiempo real sin usar algo como PhysX hasta el momento, probablemente porque los cálculos necesarios son muy complicados. El problema con su enfoque, como veo, vendría con el contacto en reposo de todas esas esferas cuando se establecieron, lo que requiere mucho poder de procesamiento. Muchos puntos de contacto en reposo son conocidos por comer en el rendimiento muy rápidamente, incluso en los escritorios más potentes.

Si va por esta ruta, recomiendo modelar el fluido como un cuerpo elástico pero sólido usando la física basada en la primavera, donde la fuerza aplicada a una parte del agua usaría resortes para propagarse hacia el resto. Esto le da la opción de establecer un punto de ruptura para los resortes y separar el cuerpo en dos o más cuerpos cuando eso ocurra (y viceversa para volver a estar juntos). Esto puede darle la base para cosas como el rociado. También es un enfoque más versátil en términos de rendimiento, porque puedes elegir la cantidad de partículas y resortes que usas para aproximar tu modelo.

Es un tema grande y complicado, ¡pero espero que haya proporcionado al menos alguna información!

1

El método más popular para simular fluidos en tiempo real es Hidrodinámica de partículas suavizadas.

Varios enlaces útiles:

http://en.wikipedia.org/wiki/Smoothed-particle_hydrodynamics

http://http.developer.nvidia.com/GPUGems/gpugems_ch38.html

http://www.plunk.org/~trina/thesis/html/thesis_toc.html

Además de Simulación en sí también tendrá algunos algoritmos de detección de colisiones en fase amplio especializados, tales como barrido-y- podar o hash células.

Y tiene razón, no hay soluciones 2D completadas para la dinámica de fluidos.

Cuestiones relacionadas