2013-08-23 15 views
6

Penso che il mio problema sia simile a: Orient object's rotation to a spline point tangent in THREE.JS ma non riesco ad accedere correttamente al jsfiddle e ho faticato con la seconda parte della spiegazione.Oggetto Three.JS che segue un percorso spline - problemi di rotazione/tanget e problema di velocità costante

Fondamentalmente, ho creato questo jsfiddle: http://jsfiddle.net/jayfield1979/qGPTT/2/ che dimostra un cubo semplice che segue il percorso creato da una spline utilizzando SplineCurve3. Usa l'interazione standard del mouse TrackBall per navigare.

Posizionare il cubo lungo il percorso è semplice. Comunque ho due domande.

In primo luogo, sto utilizzando lo spline.getTanget(t) dove t è la posizione lungo il percorso per far ruotare il cubo (solo asse Y). Penso che mi manca qualcosa perché anche se estraggo la proprietà .y della tangente risultante fornita, le rotazioni sembrano ancora spente. C'è qualcosa di nomalizzante che deve essere fatto?

In secondo luogo, la velocità è molto varia lungo il percorso, ovviamente molti più punti sono impilati nel creare le curve più strette, ma mi chiedevo se c'è un modo per ridefinire il percorso per distribuire più uniformemente gli spazi tra i punti? Mi sono imbattuto nella funzione reparametrizeByArcLength ma ho faticato a trovare una spiegazione su come usarla.

Qualsiasi aiuto o spiegazione per un po 'di matematica, sarebbe stato accolto con gratitudine.

risposta

14

Per mantenere una velocità costante, utilizzare .getPointAt(t) anziché .getPoint(t).

Per ottenere la casella per rimanere tangente alla curva, si segue la stessa logica come spiegato nella risposta a Orient object's rotation to a spline point tangent in THREE.JS.

box.position.copy(spline.getPointAt(counter)); 

    tangent = spline.getTangentAt(counter).normalize(); 

    axis.crossVectors(up, tangent).normalize(); 

    var radians = Math.acos(up.dot(tangent)); 

    box.quaternion.setFromAxisAngle(axis, radians); 

EDIT: violino Aggiornato: http://jsfiddle.net/qGPTT/509/

Three.js r.88

+0

Fantastic. Apprezzo il violino perché mi permette di vedere questo in azione e apprendere in questo modo. Grazie mille. – jayfield1979

+0

Grazie per questa risposta e il violino, ho trovato molto facile da seguire, se perdonate il gioco di parole ;-). Non vedo l'ora di applicare questo al mio gioco per bambini, questo funzionerà bene sia per i binari del treno che per le montagne russe. Grazie ancora. –

+0

@WestLangley In seguito a questa eccellente risposta, ho implementato con successo questo nel mio progetto (dopo una lunga pausa) ma ho un problema con questo: http://jsfiddle.net/jayfield1979/T2t59/ Quando le scatole arrivano al secondo rettilineo, si ribalta! C'è un modo per risolvere questo? – jayfield1979

Problemi correlati