Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

14.11.2013, 16:02

Mehrmalige Transformation von Punkten

Hey liebes Forum,

Ich habe ein Frage zu der mehrmaligen Transformation von einem Rechteck.
Ich habe mir ein Programm geschrieben, das ein Rechteck rotiert.
Ich wende eine Rotationsmatrix alle paar millisekunden auf die Punkte des Rechtecks an.
Da es in der Mitte des Koordinatensystems gemalt wird rotiert es auch so wie ich das möchte.
Nun würde ich jedoch gerne die rotation beibehalten ( also um die eigene Achse ) und den Rechteck z.B. nach rechts wandern lassen.

hier nun aber das Problem.
Zuerst wende ich die Rotation an, danach verschiebe ich um 2 Einheiten nach rechts.
Soweit, so gut. Doch sobald dies ein zweites mal geschieht dreht sich mein Rechteck nicht mehr um die eigene Achse, sondern weiterhin um den Mittelpunkt des Koordinatensystems.

Dies führt zu einer komischen Elliptischen Bewegung um den Mittelpunkt meines Koordinatensystems.

Wie schaffe ich es nun das sich mein Würfel um seinen eigenen Mittelpunkt dreht?
Ich könnte den Würfel wieder zum Mittelpunkt des Koordinatensystems verschieben, dann rotieren und wieder an die ursprünglich Position verschieben.
Könnte mir jemand helfen eine performante Lösung zu finden?

Danke

FSA

Community-Fossil

  • Private Nachricht senden

2

14.11.2013, 16:41

Willkommen im Forum!
Entweder du rotierst um deine lokale Achse, oder du verschiebst das Objekt wieder in den Ursprung, rotierst, und verschiebst es wieder. Um in den Ursprung zu kommen, kannst du einfach deine translations Vektor * -1 nehmen, wenn ich nicht irre. Ich empfehle dir die zweite Methode.
EDIT: Das passiert wenn man Fernseh guckt und schreibt... Sorry hatte die letzten drei Zeilen deines Posts überlesen.

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »FSA« (14.11.2013, 16:47)


3

14.11.2013, 16:46

Vielen Dank!!!!

Ich werde das mit der Inversen versuchen.
Kann mir jemand sagen wie ich ein solche Ortsmatrix erstelle?

FSA

Community-Fossil

  • Private Nachricht senden

4

14.11.2013, 16:58

Ich gehe mal von einem 3D Raum aus:
Erst möchtest du dein dein Objekt rotieren und dann verschieben. Dann müsstest du solch eine Matrix haben. (Ohne Rotation)
§ \begin{pmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ Tx & Ty & Tz & 1 \end{pmatrix} § Wobei T dein Translationsvektor ist.
Wenn du jetzt dein Objekt wieder zum Ursprung verschieben willst, ohne die Rotation zu verlieren, nimmst du deine ausgerechnete Matrix mal der:
§ \begin{pmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ -Tx & -Ty & -Tz & 1 \end{pmatrix} §

Dann einfach wieder rotieren und verschieben.

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »FSA« (14.11.2013, 17:07)


DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

5

14.11.2013, 17:50

Für 2D reicht eine 3x3 Matrix.

6

14.11.2013, 19:52

Es klingt, als multiplizierteste Du die Rotations- und Translationsmatrizen in jedem Durchlauf auf die bestehende Matrix.

Du musst diese jedem Durchlauf neu errechnen und das Produkt verwenden.

Zitat

Ich bin nicht der Messias.
Ich sage, du bist es, Herr. Und ich muss es wissen, denn ich bin schon einigen gefolgt.

https://bitbucket.org/bwbg

7

14.11.2013, 21:42

Ne ich hab eine matrix die beinhaltet alle Transformationen. Diese Matrix multiplizier ich mit meinen Punkten. Ich hab auch schon gehört dass ich nach jedem rendern die matrix entsprechend verändern soll und dann sie auf die orginalen punkte anwenden. Aber ist das nicht zu viel gerechne?

FSA

Community-Fossil

  • Private Nachricht senden

8

14.11.2013, 21:46

Wo ist das Problem meiner Lösung? Matrixmultiplaktion ist nun mal nicht 3*4=4*3.

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

9

14.11.2013, 22:56

Ne ich hab eine matrix die beinhaltet alle Transformationen. Diese Matrix multiplizier ich mit meinen Punkten. Ich hab auch schon gehört dass ich nach jedem rendern die matrix entsprechend verändern soll und dann sie auf die orginalen punkte anwenden. Aber ist das nicht zu viel gerechne?

Nein, das ist nicht "zu viel Gerechne". Du glaubst gar nicht, wie viel so eine moderne CPU rechnen kann.
Es ist sogar die einzige vernünftige Lösung, denn mit deiner jetzigen Methode werden die Zahlen mit der Zeit immer ungenauer. Irgendwann hat sich dein Rechteck völlig deformiert, da die Rechenfehler (Fließkommazahlen sind natürlich nur endlich genau!) sich immer weiter hochschaukeln.

Werbeanzeige