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

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

11

20.06.2010, 15:48

Dein Code macht die Operationen genau andersrum als du wolltest: Verschieben -> Rotieren -> Skalieren.
@D13_Dreinig

12

20.06.2010, 16:10

Hä?

Muss man also die Matrizen in der umgekehrten Reihenfolge multiplizieren? Man is das kompliziert. Jetzt frag ich mich, warum? ?( also hab ich meine Transformationsmatrix jetzt so:

C-/C++-Quelltext

1
mTransform = mTranslate*mRotate*mScale;



Und der resultierende Vektor stimmt. Aber warum steht in dem Buch dann (S.73) dass Rotationsmatrix x Translationsmatrix die richtige Lösung ist? Ich multipliziere doch die Translationsmatrix mit der Rotationsmatrix und dieses Produkt mit der Skalierungsmatrix.



Vektor v(1,1,0) mit 2 Skalieren

(2,2,0) um 90 Grad an der x-Achse rotieren

(2,1,1) um (4,2,1) verschieben



Resultierender Vektor: (6,3,2)
Denkfehler: der Vektor nach der Rotation muss 2,0,2 heißen und somit ist der resultierende Vektor 6,2,3


Gruß, Paul

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

13

20.06.2010, 19:11

Muss man also die Matrizen in der umgekehrten Reihenfolge multiplizieren? Man is das kompliziert. Jetzt frag ich mich, warum? ?( also hab ich meine Transformationsmatrix jetzt so:

C-/C++-Quelltext

1
mTransform = mTranslate*mRotate*mScale;


Die Multiplikationsreihenfolge hängt von der Konvention ab. Häufiger findet man aber den Fall wie jetzt hier bei Irrlicht.
@D13_Dreinig

14

20.06.2010, 20:41

Die Multiplikationsreihenfolge hängt von der Konvention ab. Häufiger findet man aber den Fall wie jetzt hier bei Irrlicht.

Okay dann häng ich mir jetzt nen Zettel an die Pinnwand:

1. Translation
2. Rotation
3. Skalierung



Warum genau das jetzt mal so und mal so rum sein kann, kapier ich immer noch nicht, aber Matrizen kommen ja auch in der Schule noch. Eigentlich fand ich die Begründung in David Scherfgens Buch sehr logisch (erst skalieren, dann rotieren, dann verschieben). Warum es auch andersrum sein kann ist mir nach wie vor Schleierhaft


Gruß, Paul

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

15

20.06.2010, 22:16

Nein, das hast du falsch verstanden. Die Reihenfolge wie die Transformationen ausgeführt werden ist schon wie in dem Buch beschrieben. Aber die Reihenfolge wie du die einzelnen Matrizen multiplizierst ist genau umgekehrt.

Quellcode

1
2
3
       3             2         1    <----- Reihenfolge wie Transformationen angewendet werden (I)
mat = translate * rotate * scale;
       1             2         3    ------> Multiplikationsreihenfolge (II)


Wie gesagt, es kann auch den Fall geben das I und II übereinstimmen, je nach Konvention. Allerdings ist das nun bei Irrlicht eben nicht der Fall.
@D13_Dreinig

16

21.06.2010, 12:41

Okay dann vielen Dank


Paul

Werbeanzeige