2013-04-10 8 views
5

Sto provando a spostare un cubo in three.js in base alla sua rotazione ma non sono sicuro su come procedere.Spostamento di un oggetto in base alla sua rotazione in three.js

A partire da ora posso ruotare la rotazione z del cubo con i tasti A & D. E con il tasto W vorrei spostarmi in avanti rispetto alla sua rotazione.

Da 2D vorrei quindi qualcosa sulla falsariga di:

float angle = GradToRad(obj.rotation); 
obj.x = obj.x + cos(angle) * velocity; 
obj.y = obj.y + sin(angle) * velocity; 

Ecco un'immagine della implementazione corrente. 3D Cube three.js

Come posso applicare qualcosa di simile in three.js?

risposta

7

Gli oggetti possono essere considerati rivolti verso l'asse Z positivo. Quindi, per spostare un oggetto in avanti, rispetto ad essa la propria sistema di coordinate, è possibile utilizzare

Object3D.translateZ(distance); 

Three.js r.57

+0

Sì, ma la semplice traslazione lungo l'asse Z non consentirà al mio oggetto di muoversi rispetto alla sua rotazione. Significa che girando attorno all'oggetto desidero che si muova lungo il suo "fronte". – Placeable

+0

In quale direzione il tuo oggetto "affronta" quando è il vettore di rotazione è (0, 0, 0)? Questa è la direzione locale in cui vuoi spostarti dopo l'applicazione della rotazione. – WestLangley

+0

I roatate attorno all'asse Z. – Placeable

0

Potrebbe essere più semplice esprimere sia la rotazione che la traduzione in un singolo (proiettivo omogeneo) 4×4 matrix. Il membro Object3D.matrix in three.js lo fa già, anche se potresti dover impostare matrixAutoUpdate su false per utilizzarlo direttamente. Quindi è possibile spostare utilizzare il metodo translate per spostare l'oggetto nel proprio frame di riferimento.

+0

È altamente sconsigliabile per gli utenti fare confusione con la matrice dell'oggetto direttamente in three.js. Fallo solo se sai veramente cosa stai facendo e hai familiarità con il funzionamento interno della biblioteca. – WestLangley

0

Il tuo metodo 2D è esattamente come ho fatto in Three.js. Per la posizione Y sto usando una tecnica di collisione del terreno (che ha ancora bisogno di lavoro);