|
Autor |
Basiswechselmatrizen und OpenGL |
|
Corpsman
Ehemals Aktiv  Dabei seit: 19.11.2005 Mitteilungen: 26
Wohnort: Stuttgart
 | Themenstart: 2020-04-25
|
Hallo zusammen,
Ich versuche gerade mich wieder ein bischen mit Mathe und OpenGL zu beschäftigen. Dazu habe ich mir gedacht schreibe ich mir einen kleinen Drohnensimulator (ja ich weis, sowas gibt es schon, sogar umsonst) aber wo bleibt denn da der Spass.
Zum Thema:
Eine Drohne steuert man mit 4 Achsen (Roll, Yaw, Pitch (Rotation um die 3 Achsen) und Throttle (translation entlang der Hoch Achse))[Acro-Modus]
In OpenGL wird alles mit 4x4 Matrizen gemacht diese sind wie folgt aufgebaut:
(r r r x)
(r r r y)
(r r r Z)
(0 0 0 1)
der Linke obere 3x3 Matrix ist die Rotation, xyz die Position im Raum. Die untere Zeile habe ich noch nicht verstanden, aber 0 0 0 1 ist wohl Richtig.
Damit ich das ganze Rendern kann mache ich Sinngemäß etwa folgendes:
1. Load Identity Matrix
2. Multiply Rotationmatrix
3. Translate to -Camera Position (die Subtraktion ist OpenGL Spezifisch, normal wäre ja eine Addition)
Eigentlich kann man 2. und 3. in einer Matrix abarbeiten, da ich aber ständig rotieren will und sonst vor jeder Rotation die Position abziehen Rotieren und dan wieder addieren müsste ist das so leichter.
So viel zu meinen Rahmenbedingungen und nun zu meinem Problem:
Ich kann die Rotationsmatrix 1a Berechnen und das OpenGL-Vorschau Fenster Zeigt mir auch, dass alle Rotationen entsprechend meinen Wünschen Korrekt umgesetzt werden. Die Schwerkraft zu simulieren ist ebenfalls kein Problem, da ich hierzu einfach nur die Hochachse im Absoluten System zyklisch um einen durch die Gravitation berechneten wert verringern muss und schon sinkt meine Drohne zu Boden (y-Achse).
Mein Problem ist Throttle (Also die Bewegung nach Oben aus Kamerasicht).
Eigentlich dachte ich, mache ich das wie folgt
v = (0 / delta / 0) (y ist die Hochachse)
v2 = M * v (M ist die Rotationsmatrix die mir meinen OpenGL-Screen richtig dreht)
Absolute Postion = Alte Absolute Position + v2
=> Umrechnen der Kamera Richtung in Absolutes Koordinatensystem und dann entsprechend verschieben dieser Absoluten Position.
Das Ergebnis ist das es manchmal stimmt, manchmal meine eigentlich "Hoch" Bewegung zu einer Seitwärts Bewegung wird und manchmal die Hochbewegung zu einer Runter Bewegung.
=> Die Umrechnung ist nicht komplett Müll, aber eben auch nicht Richtig
Ich habe gehört das es da so was wie Gimbal Lock geben soll, bin mir aber nicht sicher ob das damit zu tun hat.
So viel zu meiner Situation und hier noch mal als unabhängige Frage formuliert.
Wenn ich eine Matrix habe die mir von meinem Absoluten System in ein gedrehtes System wechselt und ich mich Relativ zum gedrehten System in eine bestimmte Richtung bewegen will, wie berechne ich das dann ?
Gruß
Corpsman
[Edit die Selbe frage habe ich auf auf https://delphigl.com/forum/viewtopic.php?f=30&t=11700 gestellt.
|
Profil
|
Corpsman wird per Mail über neue Antworten informiert. |
|
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2023 by Matroids Matheplanet
This web site was originally made with PHP-Nuke, a former web portal system written in PHP that seems no longer to be maintained nor supported. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen. Lesen Sie die
Nutzungsbedingungen,
die Distanzierung,
die Datenschutzerklärung und das Impressum.
[Seitenanfang]
|