Spostare un oggetto lungo una curva mentre lo si ruota


11

Mi piacerebbe muovere un oggetto lungo una curva . In particolari punti della curva, desidero che l'oggetto cambi velocità e ruoti se stesso lungo il suo asse.

Immagina un aereo che vola verso una destinazione. Ha il suo percorso che deve seguire, inoltre, regola la sua velocità e l'orientamento fino in fondo (direzione, midollo, banco).

Posso gentilmente chiedere informazioni di avvio su quanto segue:

  • Che tipo di curve usare per interpolare uniformemente un oggetto
  • Quali formule usare per un'interpolazione affidabile, dove potrei controllare la velocità di espulsione in movimento e la transizione tra i nodi della curva sarebbero senza soluzione di continuità
  • Quali informazioni devono essere esportate da un'applicazione di creazione 3D
  • Dovrei usare quaternions slerp () per questo?

Se sei a conoscenza di un libro che tratta questo argomento in modo efficiente , questo farebbe di più. Grazie.

Risposte:


7

Per la curva del movimento, suggerirei di usare le curve Hermite. Dai semplicemente un punto / velocità iniziale e un punto / velocità finale, e crea una curva piacevole e regolare tra quei due. Usa il punto finale / velocità della prima coppia di punti come punto iniziale / velocità della prossima coppia di punti e hai una bella curva lunga e tortuosa che è senza soluzione di continuità.

Ciò gestisce perfettamente l'esigenza di gestire la velocità: si fornisce un elenco di punti nel tempo con le velocità scelte e fornisce la posizione perfettamente interpolata e i valori di velocità. Se vuoi andare con questo, tutto ciò che devi estrarre dall'applicazione di creazione 3D sono punti e velocità nel percorso che desideri. Puoi anche generarli in fase di esecuzione, forse in base all'input dell'utente.

Per regolare l'orientamento, sono disponibili diverse opzioni. Se l'aereo indicherà sempre la direzione in cui sta andando (che è il caso che ha senso), puoi usare il vettore di velocità interpolato dalla curva dell'Hermite per trovare dove la tua nave dovrebbe puntare. Se conosci il vettore in alto (si sta muovendo in un piano o sai quale direzione dovrebbe essere in alto) puoi calcolare il terzo asse per croce (fronte, su) e lì hai il tuo orientamento.

Se si desidera in qualche modo un orientamento "traballante" in modo che il piano a volte si discosti dalla direzione anteriore nel percorso, è possibile utilizzare la direzione anteriore come direzione desiderata e successivamente eseguire un passo in avanti tra l'orientamento corrente e l'orientamento desiderato.

Se desideri orientamenti personalizzati che non hanno nulla a che fare con il percorso, puoi ovviamente fornire un elenco di quaternioni di orientamento a questo. Quindi i tuoi punti diventano (punto, velocità, quaternione). Quindi puoi usare slerp tra due quaternioni successive per impostare i tuoi orientamenti lungo il percorso. Non dimenticare che slerp è un metodo di interpolazione lineare . Tuttavia, di solito dovrebbe andare bene. Se trovi che le rotazioni non sono abbastanza lisce nelle cuciture, puoi provare a interpolare l'elenco dei quaternioni con una curva di Bezier, come spiegato qui nella sezione 7.

Ecco del codice sorgente che può aiutarti a iniziare. Ha una serie di tecniche di interpolazione fluida per un elenco di quaternioni (squadra, bezier, ecc.).

Fatemi sapere se avete domande!


+1 - Grazie, la tua risposta sostanzialmente copre tutto. Risponde a tutte le domande che ho posto, inoltre, fornisci ulteriore materiale da studiare. Ora ho abbastanza materiale per iniziare. Pertanto, non vedo alcun motivo per non contrassegnarlo come risposta accettata .
Bunkai.Satori,

@Bunkai.Satori grazie, felice di esserti stato d'aiuto :) Mi piacerebbe vedere quello che crei alla fine.
Gazihan Alankus,
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.