Rotation um einen Punkt

Design Patterns, Erklärungen zu Algorithmen, Optimierung, Softwarearchitektur
Forumsregeln
Wenn das Problem mit einer Programmiersprache direkt zusammenhängt, bitte HIER posten.
Antworten
Benutzeravatar
Zudomon
Establishment
Beiträge: 2253
Registriert: 25.03.2009, 07:20
Kontaktdaten:

Rotation um einen Punkt

Beitrag 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
Benutzeravatar
Schrompf
Moderator
Beiträge: 4838
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: Rotation um einen Punkt

Beitrag 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.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Haiaiai
Beiträge: 8
Registriert: 26.06.2009, 10:18

Re: Rotation um einen Punkt

Beitrag 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ß.
Benutzeravatar
Zudomon
Establishment
Beiträge: 2253
Registriert: 25.03.2009, 07:20
Kontaktdaten:

Re: Rotation um einen Punkt

Beitrag von Zudomon »

Dank euch beiden!
Stimmt, einfach ne Rotationsmatrix! *Smilie mit Kopf gegen Wand* (Warum haben wir so einen eigentlich nicht???)
Benutzeravatar
eXile
Establishment
Beiträge: 1136
Registriert: 28.02.2009, 13:27

Re: Rotation um einen Punkt

Beitrag 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
Benutzeravatar
Zudomon
Establishment
Beiträge: 2253
Registriert: 25.03.2009, 07:20
Kontaktdaten:

Re: Rotation um einen Punkt

Beitrag von Zudomon »

Bis jetzt funktioniert das genau so, wie ich es haben wollte.
Eventuell stelle ich gleich mal eine Version zum testen on. :D
Antworten