OrbitControl oder TrackballControl

8

Ich habe viel über diese zwei Steuerelemente gelesen und verwende derzeit TrackballControls.

Ich muss ein Objekt entlang aller drei Achsen drehen (beide Steuerelemente tun das schon), aber Ich muss auch manchmal eine neue Kameraposition / Rotation von Hand einstellen . Und das funktioniert nicht wirklich.

Meine Abhilfe ist es deaktiviere die Trackball-Steuerung, Nimm das Quaternions-Objekt der neuen Position, Wende diese auf camera.up an und dann die Kamera aktivieren

Aber wie gesagt, das funktioniert nicht wirklich stabil.

Ich habe gelesen, dass OrbitControls eine bessere Lösung für eine solche Aufgabe sein könnte. Aber OrbitControls hat eine "Grenze" für die vertikale Drehung von Objekten und ich muss meine Objekte ohne Grenzen drehen.

Meine Fragen sind also:

1. Welches Steuerungssystem ist für meine Aufgabe besser geeignet

2. Wenn es Trackball ist - wie würden Sie manuell eine neue Kameraposition und -rotation einstellen? Und wenn es Orbit ist - gibt es eine Möglichkeit, dieses vertikale Rotationslimit zu deaktivieren?

Vielen Dank !!

Grüße - Misa

    
Kosha Misa 02.09.2013, 21:51
quelle

2 Antworten

23

Zunächst drehen TrackballControls und OrbitControls die Kamera , nicht die Objekte.

Zweitens erzwingt OrbitControls die Kamera up direction, und TrackballControls lässt die Kamera auf dem Kopf stehend drehen.

TrackballControls hat eine reset() -Methode, die die target (Drehzentrum), die Kamera position und die Kamera up vector auf ihre ursprünglichen Einstellungen zurücksetzt.

%Vor%

Der obige Code wird den ursprünglichen position , target und up Vektor wiederherstellen. Sie können diese auch ändern, wenn Sie möchten, bevor Sie controls.reset() aufrufen.

%Vor%

Lesen Sie den Funktionscode reset() , damit Sie verstehen, was er tut.

EDIT: OrbitControls hat jetzt auch eine reset() Methode. Überprüfen Sie den Quellcode.

drei.js r.82

    
WestLangley 02.09.2013, 22:50
quelle
0

Um TrackballControls zu zwingen, sich nur horizontal zu drehen, finden Sie die Implementierung der Funktion getMouseProjectionOnBall und fügen Sie eine einzelne Zeile hinzu:

%Vor%

Ich arbeite immer noch daran, den Winkel in einem Bereich zu begrenzen, anstatt ihn zu deaktivieren ...

    
CodeColorist 07.11.2014 05:06
quelle

Tags und Links