Zu doof zum Vektoren Rotieren [Gelöst!]

Design Patterns, Erklärungen zu Algorithmen, Optimierung, Softwarearchitektur
Forumsregeln
Wenn das Problem mit einer Programmiersprache direkt zusammenhängt, bitte HIER posten.
Antworten
Benutzeravatar
ponx
Establishment
Beiträge: 217
Registriert: 04.05.2008, 12:52
Echter Name: Andy Ponx
Wohnort: Hamburg
Kontaktdaten:

Zu doof zum Vektoren Rotieren [Gelöst!]

Beitrag von ponx »

Hallo Leute,
ich brauch mal wieder Nachhilfe in 3D-mathe Grundlagen. :oops: Folgendes Problem hab ich:
Ich hab ein 3D-Spielobjekt, das in eine bestimmte Richtung guckt (mit dem Unit-Vektor Vector3 'Forward'). Jetzt würde ich gern den toten Winkel des Objekts grafisch darstellen, mit zwei einfachen Linien, die in einem bestimmten Winkel von der Guck-Richtung wegzeigen. Im Lokalen Koordinatensystem konnte ich die auch schön berechnen, nennen wir sie mal toterVector1 und toterVector2. Jetzt müsste ich die nur noch in den gleichen Winkeln rotieren, wie der Forward-Vektor (0 1 0) verdreht ist, und alles wäre ok. Ich habs mir aufgemalt und eigentlich müsste es so gehen: Wenn alpha die Verdrehung des Forward-Vektors um die Z-Achse ist, dann wäre

sin(alpha) = Forward.X
-> sprich ich krieg meine Verdrehung um die Y-Achse mit ArcSin(Forward.X) , richtig ?

Und wenn beta die Verdrehung meines Forward-Vektors um die X-Achse ist, dann wäre

tan(beta) = Forward.Z / Forward.Y
-> sprich beta = ArcTan(Forward.X / Forward.Z) ?

Jetzt müsste ich nur davon wieder je eine Rotations-Matrix für X- und Y-Rotation erstellen, also (in XNA):

Matrix rotX = Matrix.CreateRotationY(alpha);
Matrix rotY = Matrix.CreateRotationX(beta);

.. und dann meine beiden toten Vektoren damit drehen..

toterVector1 =Vector3.Transform(toterVector1, rotX * rotY);
toterVector2 = Vector3.Transform(toterVector2, rotX * rotY);

und dann auf Weltkoordinaten verschieben, und alles wäre gut ? Die zeigen nur leider sonstwo hin. Was mach ich falsch ? :cry:

lg vom ponx
Zuletzt geändert von ponx am 14.06.2010, 17:23, insgesamt 1-mal geändert.
Benutzeravatar
Brainsmith
Establishment
Beiträge: 109
Registriert: 04.09.2009, 13:52
Echter Name: Fabbo

Re: Zu doof zum Vektoren Rotieren

Beitrag von Brainsmith »

Egal, in welcher Sprache. Es gilt immer:

Wenn du einen Vektor drehen willst, verschiebst du ihn zuerst an den Ursprung, drehst ihn und verschiebst ihne wieder zurück. In jedem anderen Fall drehst du um eine andere Achse. So wie ich das bisher sehe, hast du vergessen die Vektoren vor dem Drehen an den Ursprung zu verschieben
Benutzeravatar
ponx
Establishment
Beiträge: 217
Registriert: 04.05.2008, 12:52
Echter Name: Andy Ponx
Wohnort: Hamburg
Kontaktdaten:

Re: Zu doof zum Vektoren Rotieren

Beitrag von ponx »

Danke für die Antwort ! Der Forward-Vektor ist schon im Ursprung, d.h. es ist einfach der Blickrichtungs-Vektor des Spielobjekts in Unit-Länge. Meine "toten Vektoren" haben auch Unit-Länge, ich mal die dann nur an die Position des Spielobjekts in Weltkoordinaten.
Ich hab's jetzt hinbekommen, weil ich glücklicherweise auch die gedrehten "Up" und "Side" Vektoren hatte, die dann zusammen mit dem Forward-Vektor die drei gedrehten Ortsvektoren bilden. Damit konnte ich dann die Rotationsmatrix zusammenbasteln, indem ich die da reinkopiert hab. Plus bisschen rumprobieren hat's dann irgendwie geklappt, hurra !
joeydee
Establishment
Beiträge: 1058
Registriert: 23.04.2003, 15:29
Kontaktdaten:

Re: Zu doof zum Vektoren Rotieren [Gelöst!]

Beitrag von joeydee »

ponx hat geschrieben:Ich hab's jetzt hinbekommen, weil ich glücklicherweise auch die gedrehten "Up" und "Side" Vektoren hatte, die dann zusammen mit dem Forward-Vektor die drei gedrehten Ortsvektoren bilden. Damit konnte ich dann die Rotationsmatrix zusammenbasteln
Hättest du gar nicht zusammenbasteln müssen - einfach deine Vektoren mit der aktuellen Objektmatrix multiplizieren und sie sind da wo sie hingehören. Denn in Gedanken kannst du sie einfach als weitere Vertices deines Modells betrachten.
Benutzeravatar
ponx
Establishment
Beiträge: 217
Registriert: 04.05.2008, 12:52
Echter Name: Andy Ponx
Wohnort: Hamburg
Kontaktdaten:

Re: Zu doof zum Vektoren Rotieren [Gelöst!]

Beitrag von ponx »

joeydee hat geschrieben: Hättest du gar nicht zusammenbasteln müssen - einfach deine Vektoren mit der aktuellen Objektmatrix multiplizieren und sie sind da wo sie hingehören. Denn in Gedanken kannst du sie einfach als weitere Vertices deines Modells betrachten.
Ich hatte die Objektmatrix nicht, weil das Rendern über so einen abstrakten Render-Aufruf bewerkstelligt wird (das Projekt ist nicht auf meinem Mist gewachsen). Aber hätte ich mich da mal weiter reingefuchst, wär ich bestimmt schneller auf die Idee mit dem Matrix-Basteln gekommen..! :oops:
Antworten