Ich versuche zu verstehen, wie up-Vektoren und lookAt () in three.js zusammenarbeiten. Ich setze den Up-Vektor dieses axisHelper, so dass die Y-Achse immer auf das Zielgeo zeigt, welches die Position des Up-Vektors markiert. Es funktioniert wie erwartet für X und Y und rotiert die Achsen um die Z-Achse. und wenn ich versuche, den Z-Wert des Aufwärts-Vektors einzustellen, würde ich erwarten, dass sich die Achsen um die X-Achse drehen, aber nichts passiert.
Ссылка [Bearbeiten: Ich habe Geo hinzugefügt, um die Zielposition anzuzeigen.]
Ich habe eine dat.gui-Schnittstelle, die den up-Vektor manipuliert, um zu demonstrieren, aber das Problem besteht, wenn ich den Vektor auch manuell setze.
Ich vermute, dass das Problem in der Nähe von Zeile 74 liegt:
%Vor%Wenn ich den up-Vektor aktualisiere, befehle ich dem axisHelper, seine Ausrichtung auf dem Bildschirm zu aktualisieren, indem ich sein lookAt () um seine Z-Achse nach unten korrigiere. Ändern der X und Y funktioniert wie erwartet, warum nicht das Z?
(Dies ist auch der Fall, wenn ich geo anstelle eines axisHelper verwende: Ссылка )
Wenn Sie Object.lookAt( vector )
aufrufen, wird das Objekt so gedreht, dass seine interne z-Achse auf das Ziel vector
zeigt.
Aber das reicht nicht aus, um die Ausrichtung des Objekts anzugeben, da das Objekt selbst immer noch auf seiner z-Achse "gedreht" werden kann.
Also wird das Objekt dann "gedreht", so dass seine interne y-Achse in der Ebene seiner inneren z-Achse und dem up
-Vektor liegt.
Der Zielvektor und der Vektor up
sind zusammen ausreichend, um die Ausrichtung des Objekts eindeutig anzugeben.
drei.js r.63
Tipp: Eine Achse in threw.js sollte immer eine Einheitslänge haben; Achten Sie darauf, axis.normalize () in Ihrem Code aufzurufen.
Ich nehme an, dein Titel bedeutete, dass du auf Z anstatt auf X drehst?
Wie auch immer, der Übeltäter scheint axes.lookAt(new THREE.Vector3(0, 0, 1));
zu sein, wenn Sie das für alle Methoden in axes.lookAt(new THREE.Vector3(0, 1, 0));
ändern, dann dreht sich Y nicht wie erwartet. Sie weisen den Achsenhelfer an, eine bestimmte Achse (in Ihrem Fall Z) nach unten zu sehen. Daher funktioniert der Z-Wert nicht.
Gibt es ein Beispiel dafür, was Ihr zu erreichen versucht, das uns helfen könnte?
Vielleicht kann jemand anders ein bisschen mehr erklären, was passiert. Hoffentlich wird meine Antwort Sie in die richtige Richtung drücken.
So habe ich das Problem verstanden:
Die lookAt- und up-Vektoren bestimmen die Ausrichtung eines Objekts wie folgt:
In meinem Beispiel sieht der axisHelper seine blaue Z-Achse in Richtung des LookAt-Vektors, der ein Punkt im Raum bei (0, 0, -1) ist - also haben die X- und Y-Rotationen bereits eingestellt . Jetzt müssen Sie nur noch herausfinden, wie Sie den axisHelper um seine Z-Achse drehen, was bedeutet, dass die X- und Y-Punkte des Aufwärtsvektors gesetzt werden. Wenn Sie den Aufwärtsvektor entlang der Z-Achse vorwärts und rückwärts bewegen, ändert sich nichts.
Hier ist eine Geige mit einer Demo, die diese Beziehung veranschaulicht: der blaue Pfeil ist die LookAt-Achse und der grüne Pfeil ist die obere Achse.
%Vor%
Tags und Links vector linear-algebra three.js