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
Rotation um einen Punkt
Forumsregeln
Wenn das Problem mit einer Programmiersprache direkt zusammenhängt, bitte HIER posten.
Wenn das Problem mit einer Programmiersprache direkt zusammenhängt, bitte HIER posten.
- Schrompf
- Moderator
- Beiträge: 4996
- Registriert: 25.02.2009, 23:44
- Benutzertext: Lernt nur selten dazu
- Echter Name: Thomas
- Wohnort: Dresden
- Kontaktdaten:
Re: Rotation um einen Punkt
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.
Re: Rotation um einen Punkt
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:Also meine konkrete Frage, wie bekommt man es fertig, das eine bestimmte Strecke auf einer Kugel zurückgelegt wird?
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
Dank euch beiden!
Stimmt, einfach ne Rotationsmatrix! *Smilie mit Kopf gegen Wand* (Warum haben wir so einen eigentlich nicht???)
Stimmt, einfach ne Rotationsmatrix! *Smilie mit Kopf gegen Wand* (Warum haben wir so einen eigentlich nicht???)
Re: Rotation um einen Punkt
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
Siehe z.B. hier: http://www.cs.sunysb.edu/~mueller/teach ... ckball.ppt
Re: Rotation um einen Punkt
Bis jetzt funktioniert das genau so, wie ich es haben wollte.
Eventuell stelle ich gleich mal eine Version zum testen on. :D
Eventuell stelle ich gleich mal eine Version zum testen on. :D