Wasser / Ozean-Simulation und Physik


42

Ich suche nach Referenzen über Wassersimulation und wie man die Interaktion mit Körpern (wie Booten, Schiffen, U-Booten) modelliert.

Ich habe viele Hinweise zu den visuellen Aspekten von Wasser gefunden (Wellen, Reflexionen usw.), aber nur sehr wenige Hinweise zum Umgang mit der Art und Weise, wie es mit Körpern interagieren sollte. Meine Erfahrung mit Spieleentwicklung ist sehr begrenzt und ich stecke hier wirklich fest.

Grundsätzlich möchte ich in der Lage sein, die Position eines Schiffes den Wellen entsprechend zu variieren. Wie kann ich das machen?

Ich verwende Panda3D, hoffe aber, etwas über Techniken und Implementierungen zu erfahren, die in jeder verfügbaren Technologie verwendet werden.

Antworten:


79

Grundsätzlich wollen Sie 6 Dinge für ein Schiff modellieren: Pitch, Yaw, Roll, Heave, Sway und Surge.

Alt-Text

Pitch, Yaw und Roll sind Drehungen, die das Schiff ausführen kann, wenn es sich am Hang der Wellen auf und ab dreht. Himmel, Schwanken und Wellen sind Bewegungen, die durch die Wellen hervorgerufen werden, die das Schiff herumschieben und / oder die das Gesicht einer Welle hinunterrutschen.

"Wie ein Auto, das auf Hügeln fährt ..."

Stellen Sie sich ein Boot auf dem Wasser vor, wie ein Auto, das über hügeligen Boden fährt. Wenn das Auto über sanfte Hügel fährt (wie ein Schiff, das über Wellen fährt), wird es sich neigen und neigen, wenn es die Hügel hinauf und hinunter fährt. Dies ist das Nicken, Gieren und Rollen. Wenn die Hügel (Wellen) groß sind, fährt das Auto (Schiff) auf und ab und rollt, während es fährt. Wenn die Hügel (Wellen) wirklich klein sind (kleiner als das Auto / Schiff), dann wird das Auto (Schiff) einfach darüber fahren und nicht viel neigen, gieren oder rollen.

Ein großes Schiff kann einfach durch kleinere Wellen pflügen, während sich ein kleines Schiff auf den Wellen auf und ab bewegt. Stellen Sie sich vor, Sie fahren mit einem Fahrrad (kleines Schiff) über eine Reihe kleiner Hügel (Wellen). Sie rollen auf und ab, während sie gehen. Dann fährt jemand mit einem großen LKW (Schiff) über sie hinweg. Der Truck ist größer als die Hügel und bewegt sich nicht wirklich auf und ab, wenn er über sie hinwegfährt.

Im Gegensatz zum Auto ist ein Schiff jedoch teilweise im Wasser, sodass seine Bewegungen etwas gedämpft werden. Stellen Sie sich ein Auto mit sehr weichen, schwammigen Reifen vor. Wenn es über winzige Hügel fährt, glätten die schwammigen Reifen es einfach. Die Bewegungen eines Schiffes werden ebenfalls gedämpft, sodass es durch kleine Wellen nicht wie ein Auto auf einer felsigen Straße auf und ab hüpft. Ein U-Boot ist so etwas wie das ultimative gedämpfte Schiff, da es im getauchten Zustand ziemlich immun gegen die Oberflächenwellen ist. Aber wenn es an der Oberfläche ist, wird es von den Wellen bewegt.

Ein Schiff rutscht auch auf Wellen. Ein Schiff, das sich einer Welle nähert, wird zum Beispiel vorwärts rasen. Um unser Auto-Beispiel zu erweitern, machen Sie es zu einem Auto mit großen schwammigen Rädern, die auf einer etwas rutschigen Oberfläche fahren. Wenn das Auto nicht den Motor antreibt, um den Schlupf auszugleichen, rutscht es die Seite eines Hügels hinunter. Selbst wenn der Motor läuft, wird es einen Schlupf geben.

Die einzige Stelle, an der die Auto- und Hügel-Analogie Probleme hat, ist die Tatsache, dass sich die Wellen im Laufe der Zeit verändern. Ein stationäres Schiff schwingt auf und ab, während die Wellen auf und ab gehen.

Wellen, die das Schiff bewegen

Wenn auf dem Schiff kein Wind weht, um es zu bewegen, und die Wellen eine perfekte Sinuswellenform haben, bewegt sich das Schiff im Grunde genommen nicht, während es in den Wellen wippt. Es gleitet in die eine Richtung, wenn es das Gesicht einer Welle hinaufgeht, und dann in die andere Richtung, wenn es das Gesicht einer Welle hinuntergeht.

Wenn die Wellen jedoch NICHT symmetrisch sind (wie im Bild unten), bewegen sie das Schiff. Da eine Seite der Welle steil ist, wird das Schiff schnell nach unten rutschen und von der Seite der Welle gedrückt werden. Der sanfte Wellenrücken wird jedoch nicht viel Bewegung haben.

Alt-Text

Dies ist nicht das perfekteste Modell für Wellenbewegungen und Formen, die sich auf die Bewegung eines Schiffes auswirken, aber es wird wahrscheinlich für eine grobe Simulation ausreichen.

Wind Effekte

Der Wind wird Ihr Schiff auch auf eine Weise herumschieben, die von der Wellenbewegung oder Schiffsbewegung unabhängig ist. Die Richtung und Kraft des Windes kann sich von der Richtung und Kraft der Wellen unterscheiden.

Auftrieb

Auftrieb ist, wie gut Ihr Schiff schwimmt. Sehr schwimmfähige Schiffe schwimmen hoch im Wasser und solche, die nicht schwimmfähig sind, sinken. Neutral schwimmende Schiffe (U-Boote) können grundsätzlich an jedem Punkt unter Wasser "schweben", weder sinken noch aufsteigen. Wenn Sie das Sinken eines Schiffes simulieren möchten, lassen Sie es negativ schwimmen und es beginnt zu sinken.

Auftrieb wirkt sich auch auf die Dämpfung der Schiffsbewegung aus. Ein Schiff, das extrem schwimmfähig ist, treibt auf der Wasseroberfläche herum und wird stark von Wellen beeinflusst. Ein Schiff, das weniger schwimmfähig ist, wird teilweise untergetaucht sein und nicht so stark betroffen sein. Denken Sie an den Unterschied zwischen einem Pingpong-Ball, der auf der Oberfläche schwimmt, und einem Apfel, der schwimmt, sich jedoch teilweise unter Wasser befindet. Der Pingpong-Ball bewegt sich bei jeder Wellenbewegung auf und ab. Der Apfel hingegen reagiert nicht auf jedes Wellendetail.

Kentern

Wenn die Neigung, das Gieren und / oder das Rollen einen bestimmten Wert überschreiten, wird Ihr Schiff umkippen. Wenn es umkippt, kann es sich mit Wasser füllen und den Auftrieb verringern, sodass es nicht mehr schwimmt.

Seekrank werden: o ~

Ein Schiff, das sich parallel zur Richtung der Wellenbewegung bewegt, befindet sich "in der Talsohle" und wird meiner Erfahrung nach die übelsten Auswirkungen haben geschmeidige fahrt - wie wenn man den wind im rücken hat. Wenn Sie in die entgegengesetzte Richtung wie die Wellen fahren, werden Sie eine ziemlich harte Fahrt haben, wenn Sie jeden Wellen- "Hügel" treffen, wie er auf Sie zukommt. Macht aber eine ziemlich aufregende Fahrt!

Weitere Lektüre

Hier sind drei Artikel, die sich mit der Wissenschaft befassen, die dahinter steckt und Ihnen einige Einblicke geben könnte. Obwohl sie sehr mathematisch und wissenschaftlich sind, können sie Ihnen eine Vorstellung von den verschiedenen Faktoren vermitteln.

Artikel 1: Modellierung der Schiffsrolldynamik und ihrer Kopplung mit Himmel und Neigung

Artikel 2: Modellierung und Simulation der Schiffsdynamik

Artikel 3: Modellierung und Simulation der Schiffsdynamik

Der Autor macht Feldforschung

Hier bin ich vor ungefähr 15 Jahren, als ich auf Forschungsschiffen gearbeitet habe :)

Alt-Text


13
Wie ist es möglich, dass Sie genauso aussehen wie der Hund in Ihrem Profil? :-P
Notabene

lol ich hatte das nicht bemerkt, aber ...
Tim Holt

Das ist urkomisch !
BlueTrin

4

Haben Sie eine Wassersimulation?

Meine Vorschläge sind

  • fälsche es mit Federn. Jeder Scheitelpunkt auf der Wasseroberfläche ist zu einem Federnetz zusammengekoppelt. Ziehen Sie einen runter und alle fangen an zu oszillieren. Sie können die x- und z-Bewegung einschränken und nur die y-Bewegung (oder die Auf- und Abbewegung) zulassen.
  • fälschen Sie es, indem Sie Sinuswellen verschiedener Amplituden und Frequenzen summieren. Etwas wie das:

    rez = 32;
    for(i=-rez; i<rez; i++)
       for(j=-rez; j<rez; j++)
       {
          yofs = 0;
          yofs += 1.0 * sin( t + j*0.5 + i*0.125);
          yofs += 2.0 * sin( t + (rez-j)*0.125 + i*0.25 );
          yofs += 2.0 * sin( t + (j)*0.125 + (rez-i)*0.125 );
          yofs += 0.5 * sin( t + (rez+j)*0.125 + (rez+i)*0.125 );
          glVertex(i/rez, yofs, j/rez);
       }
  • simulieren Sie die 2D-Wellengleichung, dies kann auf der GPU sehr schnell sein. Auf dieser Seite finden Sie ein Java-Applet und Pseudocode . Überprüfen Sie auch diese Version, die gleiche, aber noch einfacher. Eine Verarbeitungsskizze mit Code.

Aus der Wellengleichung sim können Sie die Richtung (dx, dz) der Welle ermitteln, in der sie sich bewegt

dx = h[x-1][z] - h[x+1][z] 
dz = h[x][z-1]- h[x][x+1] 

wo ha 2D-Array mit der Höhe der Welle bei [x] [z]

Sie können dies zur Position des Bootes hinzufügen, damit es mit der Welle fährt ... Ich habe es versucht, aber die Bewegung wird ruckartig, deshalb habe ich es mit einem einfachen 3x3-Box-Filter geglättet (Glättung der Unterschiede / Geschwindigkeiten dx dz)

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.