Simple Wassersimulation

Kooneybert

Mitglied
Hallo Community,

ich arbeite aktuell an einem Projekt, bei dem eine Kinect mir eine Höhekarte (320x240) von einer Oberfläche liefert, welche mittels OpenGL (JOGL) in Vogelperspektive in Echtzeit gezeichnet wird. Ich würde gerne eine simple Wasserflusssimulation implementieren, d.h. z.B. einige Partikel Wasser starten an Stelle X,Y und bewegen sich abhängig von den jeweiligen Z-Koordinaten in die jeweilige Richtung. Das ganze muss nicht 100% realistisch sein, die Performance und einfache Implementierbarkeit ist mir deutlich wichtiger! Spiegelungen, Transparenz etc. sind ebenfalls nicht wirklich von Belang, das wichtigste ist die Bewegung der Partikel.
Nun zu meiner Frage:
Gibt es womöglich bereits Bibliotheken, die ich für solche Zwecke sinnvoll nutzen könnte? Wenn nicht, wie würdet ihr dieses Vorhaben realisieren?

Danke schon mal im Voraus,
Kooneybert
 

JuKu

Top Contributor
Gegenfrage:
Wozu brauchst du Partikel?
Ich glaube (reine Vermutung!) wenn du so viele Partikel verwendest, um Wasser für einen ganzen Fluss darzustellen, wirst du nicht mal 1 FPS erhalten. Wasser wird hauptsächlich über Vertex Shader realisiert (du zeichnest quasi nur die Oberfläche und bewegst sie), aber damit kenne ich mich leider auch nicht so gut aus.
Wasser Simulation ist eines der komplexesten Dinge in 3D überhaupt!
Glücklicherweise gibt es von ThinMatrix auf YouTube einige sehr gute Tutorials (glaube 7 - 8 Teile):

Und nein, meines Wissens gibt es keine fertigen Librarys für reines OpenGL, die das machen. Aber du kannst eine fertige Game Engine wie z.B. jMonkeyEngine nutzen, diese haben solche Features mit an Board.
 

JuKu

Top Contributor
Ach so. :D
Dann sind Partikel wohl das richtige, aber so einfach wie er sich das vorstellt, wird das trotzdem nicht.
 

JStein52

Top Contributor
Meine grobe Idee wäre:
Jeder Punkt der Oberfläche hat einen sogenannten Gradienten, der die Richtung der maximalen Steigung angibt. Die Kugel wird dann, wenn sie an diesem Punkt ist, so als ob sie auf einer entsprechenden schiefen Ebene wäre, in die entgegengesetzte Richtung beschleunigt.
Somit wird sie in der nächsten Zeitscheibe auf einem neuen Punkt der Oberfläche sein, mit einer bestimmten Geschwindigkeit und einer neu zu bestimmenden Beschleunigung. Und berechnet man das ausgehend vom Startpunkt in genügend kleinen Schritten sollte die entsprechende Bahn rauskommen.
 

JStein52

Top Contributor
@Kooneybert In welcher Form (java-technisch) hast du denn diese Höhenkarte vorliegen ? Als Menge von Koordinaten x,y,z jeweils mit Normalenvektor in jedem Punkt ? Oder müsste man den Normalenvektor aus den gegebenen Punkten noch ausrechnen ?
 

Ähnliche Java Themen

Neue Themen


Oben