2013-11-01 7 views
8

Ich habe eine ebene Geometrie, die immer gesetzt wird, um die Kamera über konfrontiert:Three.js - Billboard-Effekt, erhalten Orientierung nach Kameraschwenk

plane.lookAt(camera.position); 

in der Aktualisierungsschleife. Ich verwende OrbitControls, um die Kamera zu steuern. Wenn Sie die Szene drehen oder zoomen, bleibt das Flugzeug erwartungsgemäß der Kamera zugewandt.

Nach dem Schwenken der Szene, während das Flugzeug weiterhin der Kamera zugewandt ist, scheint die Kamera die Ebene zu drehen, so dass der Text zum Beispiel gedreht oder gerade erscheinen könnte, wenn die Ebene Text enthalten sollte auf den Kopf gestellt.

Wie kann das Flugzeug gezwungen werden, mit der Kamera ausgerichtet zu bleiben?

Beispiel bei jsFiddle: http://jsfiddle.net/Stemkoski/ptVLD/

Antwort

15

Die einfachste Lösung ist, einfach diese Schleife zu Ihrer Animation hinzufügen:

plane.quaternion.copy(camera.quaternion); 

Aktualisiert Geige: Aktualisiert three.js: http://jsfiddle.net/ptVLD/15/

Alternativ können Sie eine THREE.Sprite

EDIT verwenden könnte r.67

+0

Danke, diese Lösung funktioniert viel besser! –

+0

Mit Blick auf r.67 ist die Quaternion-Eigenschaft nicht mehr beschreibbar. Sie können etwas wie 'plane.setRotationFromQuaternion (camera.quaternion);' jeden Frame jetzt tun. – insominx

+0

Danke @insominx. Aktualisierte Antwort – WestLangley

6

Irgendwie gerade bei Stackoverflow Posting scheint meine Gedanken :) zu organisieren und zu klären

eine bessere Lösung (für robustere Billboarding) scheint zu sein:

plane.rotation.setFromRotationMatrix(camera.matrix); 

Der jsFiddle-Code-Link in der Frage wurde entsprechend aktualisiert; Allerdings gibt es jetzt ein "Zittern" der Kamera/Ebene beim Drehen der Kamera nach dem Schwenken, so dass ich vermute, dass diese Lösung immer noch nicht ideal ist und ich würde gerne eine Antwort schätzen und akzeptieren, die diese verbessert.

+0

Das funktioniert perfekt für mich, ich bekomme kein Zittern. Danke, ich habe das stundenlang herausgefunden. – looshi