Seite 1 von 1

Rotation um einen Punkt

Verfasst: 29.06.2009, 11:22
von Zudomon
Hallo!

Mein Problem ist folgendes:
Ich möchte es ermöglichen, das der Benutzer in meinem Editor sich um einen Punkt drehen kann. Er soll ein Objekt anklicken. Der Abstand zur Kamera lässt sich dann berechnen. Wenn man sich diesen Abstand als Radius für eine Kugel vorstellt und der angeklickte Punkt das Zentrum der Kugel ist, so liegt die Kamera auf der Kugeloberfläche. Nun möchte ich, dass sich die Kamera nur auf dieser Kugeloberflächen bewegen kann.
Mein erster Gedanke dazu war, die Verschiebung der Maus als Strafen der Kamera draufzurechnen und dann den Abstand wieder anpassen. Die Kamera würde zwar dann auf der Kugeloberfläche bleiben, aber der Grad der verschiebung stimmt nicht. Angenommen die zurückgelegte Strecke soll 10cm betragen. Würde sich nun die Kamera einfach 10cm bewegen und dann der Abstand angepasst, so würde die sich auf der Kugeloberfläche weniger als die vorgegbene Entfernung bewegen.

Also meine konkrete Frage, wie bekommt man es fertig, das eine bestimmte Strecke auf einer Kugel zurückgelegt wird?

Gruß
Zudomon

Re: Rotation um einen Punkt

Verfasst: 29.06.2009, 11:27
von Schrompf
Du nimmst den Vektor (KameraPos - Kugelpos) und rotierst ihn um die ermittelte Rotationsmatrix. Das gleiche tust Du auch mit dem Vorwärts-Vektor und meinetwegen auch dem Hochvektor der Kamera. Danach kannst Du die neue Position der Kamera wieder durch schlichte Addition der Kugelpos bekommen.

Re: Rotation um einen Punkt

Verfasst: 29.06.2009, 15:48
von Haiaiai
Also meine konkrete Frage, wie bekommt man es fertig, das eine bestimmte Strecke auf einer Kugel zurückgelegt wird?
Die Strecke ("s") die du zurücklegst ist ein Anteil des Umfangs der Kugel. Wie groß der Anteil ist hängt vom Drehwinkel ("a") ab:

s = (a / 360 ) * u

wobei gilt u = 2*pi*r. Also

a = 360*s/u

und du hast deinen Winkel für die Matrix. Statt 360 kannst du auch 2*pi verwenden, dann hast du a gleich im Bogenmaß.

Re: Rotation um einen Punkt

Verfasst: 29.06.2009, 18:16
von Zudomon
Dank euch beiden!
Stimmt, einfach ne Rotationsmatrix! *Smilie mit Kopf gegen Wand* (Warum haben wir so einen eigentlich nicht???)

Re: Rotation um einen Punkt

Verfasst: 29.06.2009, 21:00
von eXile
Dumme Frage: Kriegst du dabei keine Probleme mit Gimbal Lock? Genau aus so einem Grund wurden doch Quaternionen und die "Trackball"-Steuerung erfunden.

Siehe z.B. hier: http://www.cs.sunysb.edu/~mueller/teach ... ckball.ppt

Re: Rotation um einen Punkt

Verfasst: 29.06.2009, 21:04
von Zudomon
Bis jetzt funktioniert das genau so, wie ich es haben wollte.
Eventuell stelle ich gleich mal eine Version zum testen on. :D