Simulazione acqua / oceano e fisica


42

Sto cercando alcuni riferimenti sulla simulazione dell'acqua e su come modellarne l'interazione con i corpi (come barche, navi, sottomarini).

Ho trovato molti riferimenti sugli aspetti visivi dell'acqua (onde, riflessione, ecc.), Ma molto poco su come affrontare il modo in cui dovrebbe interagire con i corpi. La mia esperienza con lo sviluppo di giochi è molto limitata e sono davvero bloccato qui.

Bascally, vorrei essere in grado di variare la posizione di una nave in base alle onde. Come posso fare questo?

Sto usando Panda3D, ma spero di conoscere le tecniche e le implementazioni utilizzate in qualsiasi tecnologia disponibile.

Risposte:


79

Fondamentalmente stai cercando di modellare 6 cose per una nave: beccheggio, imbardata, rollio, sollevamento, oscillazione e ondata.

testo alternativo

Pitch, yaw e rollio sono rotazioni che la nave può fare mentre gira e gira andando su e giù per la pendenza delle onde. Il sollevamento, l'oscillazione e l'ondata sono movimenti indotti dalle onde che spingono la nave intorno e / o la nave che scivola lungo la faccia di un'onda.

"Come una macchina che guida sulle colline ..."

Immagina una barca sull'acqua come un'auto che guida su un terreno collinare. Se l'auto guida su dolci colline (come una nave che sorvola le onde) si inclinerà e si inclinerà man mano che sale e scende. Questo è il pitch, yaw and roll. Se le colline (onde) sono grandi, l'auto (nave) guiderà su e giù, lanciando, sbadigliando e rotolando mentre procede. Se le colline (onde) sono veramente piccole (più piccole della macchina / nave), allora la macchina (nave) sta solo andando su di esse e non inclinando, imbardando o rotolando molto.

Una grande nave può solo solcare onde più piccole, mentre una piccola nave si muoverà su e giù per le onde. Prendendo l'esempio della nostra auto, immagina qualcuno in sella a una bicicletta (piccola nave) su una serie di piccole colline (onde). Rotoleranno su e giù mentre vanno. Quindi qualcuno guida un grosso camion (nave) su di loro. Il camion è più grande delle colline, quindi non si inclina su e giù mentre le supera.

A differenza della macchina, tuttavia, una nave è parzialmente in acqua, quindi i suoi movimenti saranno leggermente smorzati. Immagina un'auto con pneumatici spugnosi molto morbidi. Quando guida su piccole colline, le gomme spugnose lo appianano. Anche i movimenti di una nave sono smorzati, quindi piccole onde non la faranno rimbalzare su e giù come un'auto su una strada rocciosa. Un sottomarino è una specie di nave smorzata per eccellenza, poiché quando è immerso è praticamente immune alle onde di superficie. Ma se è in superficie verrà mosso dalle onde.

Una nave scivolerà anche sulle onde. Ad esempio, una nave che scende lungo la superficie di un'onda si sposterà in avanti. Quindi, per estendere il nostro esempio di auto, rendila un'auto con grandi ruote spugnose che guidano su una superficie un po 'scivolosa. A meno che la macchina non stia facendo funzionare il motore per compensare lo slittamento, scivolerà giù dal lato di una collina. Anche se sta facendo funzionare il motore, ci sarà qualche slittamento.

L'unico punto in cui l'analogia tra auto e collina ha problemi è il fatto che le onde cambiano forma nel tempo. Una nave stazionaria salirà e scenderà mentre le onde saliranno e scenderanno.

Onde in movimento la nave

Se non c'è vento che soffia sulla nave per muoverla, e le onde sono una perfetta forma d'onda sinusoidale, allora la nave praticamente non si muoverà da nessuna parte mentre ondeggia tra le onde. Scorre in un modo mentre sale sulla faccia di un'onda, quindi scorre all'indietro mentre scende sulla faccia di un'onda.

Tuttavia, se le onde NON sono simmetriche (come nella figura seguente), le onde faranno muovere la nave. Poiché un lato dell'onda è ripido, la nave scivolerà rapidamente lungo quella faccia e verrà spinta dalla faccia dell'onda. La leggera pendenza posteriore dell'onda tuttavia non avrà molto movimento.

testo alternativo

Questo non è il modello più perfetto di moto ondoso e forma che influenza il movimento di una nave, ma probabilmente lo farà per una simulazione approssimativa.

Effetti del vento

Il vento spingerà anche la tua nave in modo indipendente dal moto ondoso o dal moto della nave. La direzione e la forza del vento possono essere diverse dalla direzione e dalla forza delle onde.

galleggiabilità

La galleggiabilità è quanto bene galleggia la tua nave. Le navi molto galleggianti galleggiano in alto nell'acqua e quelle che non sono affondano galleggianti. Le navi a galleggiamento neutro (sottomarini) possono sostanzialmente "librarsi" in qualsiasi momento sott'acqua, né affondando né sollevandosi. Se si desidera simulare l'affondamento di una nave, farlo galleggiare negativamente e inizierà ad affondare.

La galleggiabilità influisce anche sull'ammortizzazione del movimento della nave. Una nave estremamente galleggiante galleggerà sulla superficie dell'acqua e sarà fortemente influenzata dalle onde. Una nave meno galleggiante sarà parzialmente sommersa e non ne risentirà. Pensa alla differenza tra una palla da ping-pong che galleggia in superficie contro una mela, che galleggia ma è parzialmente sott'acqua. La pallina da ping-pong oscilla su e giù ad ogni moto ondoso. La mela d'altra parte non risponde a tutti i dettagli dell'onda.

ribaltamento

Se il beccheggio, l'imbardata e / o il rollio superano un certo valore, la tua nave si ribalta. Quando si ribalta, potrebbe riempirsi d'acqua, riducendo la galleggiabilità, evitando così di galleggiare più.

Mal di mare: o ~

Una nave che viaggia parallela alla direzione del moto ondoso è "nella depressione" e produrrà gli effetti più nauseabondi almeno nella mia esperienza :) Se stai viaggiando nella direzione in cui vanno le onde, puoi avere un giro regolare - come avere il vento alle spalle. Se stai viaggiando nella direzione opposta rispetto alle onde, avrai una corsa piuttosto dura mentre colpisci ogni "collina" ondulata quando ti viene incontro. Per un giro piuttosto eccitante però!

Ulteriori letture

Ecco tre articoli che trattano la scienza dietro questo, che potrebbe darti alcune intuizioni. Anche se pesanti per la matematica e la scienza, potrebbero darti un'idea di quali siano i diversi fattori.

Articolo 1: Modellazione della dinamica del rollio della nave e suo accoppiamento con Heave e Pitch

Articolo 2: Modellistica e simulazione della dinamica delle navi di superficie marine

Articolo 3: Modellistica e simulazione della dinamica delle navi di superficie marine

L'autore sta svolgendo ricerche sul campo

Ecco io circa 15 20 anni fa, quando ho lavorato su navi da ricerca :)

testo alternativo


13
Com'è possibile che sembri esattamente lo stesso del cane nel tuo profilo? :-P
Notabene,

lol non me ne ero accorto ma ...
Tim Holt,

Questo è divertente !
BlueTrin,

4

Hai una simulazione dell'acqua?

I miei suggerimenti sono

  • fingilo con le molle. Ogni vertice sulla superficie dell'acqua è accoppiato insieme in una maglia a molla. Tirane uno verso il basso e tutti iniziano a oscillare. È possibile limitare il movimento x, z e consentire solo y (o movimento su / giù)
  • fingilo sommando onde sinusoidali di ampiezze e frequenze diverse. Qualcosa come questo:

    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);
       }
    
  • simula l'equazione delle onde 2D, questo può essere molto veloce sulla GPU. Vedi questa pagina per un'applet Java e un pseudo codice . Controlla anche questa versione, la stessa ma anche più semplice. Uno schizzo di elaborazione con codice.

Dalla sim equazione d'onda è possibile ottenere la direzione (dx, dz) dell'onda che sta viaggiando

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

dove ha una matrice 2D con l'altezza dell'onda a [x] [z]

Potresti aggiungere questo alla posizione delle barche per farlo viaggiare con l'onda ... Ci ho provato, ma il movimento diventa a scatti, quindi l'ho appianato con un semplice filtro box 3x3 (levigando le differenze / velocità dx dz)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.