2017-06-18 4 views
0

Ich habe ein Problem: Ich habe einen Würfel und ich will, dass er dorthin geht, wohin ich will (vorwärts, rückwärts, links oder rechts). Das Problem ist, wenn ich die Kamera rotiere, muss die "Vorwärts" -Richtung immer davor sein, gleich für andere Richtungen.Three.js 90 ° Vektordrehung

In der Tat, ich habe es schon diese mit vorwärts und rückwärts zu arbeiten, indem Sie:

// For forward 
camera.getWorldDirection(direction) 
cube.position.add(direction) 
// For backward 
camera.getWorldDirection(direction) 
cube.position.sub(direction) 

Meine eigentliche Frage ist, wie ich die Vektorrichtung zu „drehen“ bei 90 °, also muss ich nur noch hinzufügen und unter der Würfelposition nach links und rechts gehen?

Antwort

1

Sie möchten eine Richtung im Kameraraum angeben und diese Richtung in den Weltbereich umwandeln. Sie können wie diese, indem Sie ein Muster so tun:

// create once and reuse 
var RightDir = new THREE.Vector3(1, 0, 0); 
var UpDir = new THREE.Vector3(0, 1, 0); 
var ForwardDir = new THREE.Vector3(0, 0, - 1); // the camera looks down its negative-z axis 
var dir = new THREE.Vector3(); 
var distance = 10; 

Dann den Würfel nach rechts zu bewegen, zum Beispiel:

dir.copy(RightDir).transformDirection(camera.matrixWorld).multiplyScalar(distance); 

cube.position.add(dir); 

Um nach links zu bewegen, einen negativen Abstand verwenden.

Hinweis: camera.matrixWorld wird normalerweise vom Renderer für Sie aktualisiert. Wenn es in Ihrer App nicht ist, müssen Sie camera.updateMatrixWorld() aufrufen, bevor Sie darauf zugreifen.

three.js. r.85

+0

Bitte denken Sie daran, Antworten zu akzeptieren, wenn Benutzer Ihnen helfen. – WestLangley