Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Mo Jul 07, 2025 19:46

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Rotationsmatrix berechnen
BeitragVerfasst: Mo Jun 29, 2009 16:16 
Offline
DGL Member

Registriert: Fr Jun 26, 2009 14:38
Beiträge: 3
Hallo Zusammen,

ich bin ein Newbe hinsichtlich OpenGL und habe Verständnissprobleme hinsichtlich Berechnung der Rotationsmatrix (Modelview):

Ich habe schon einiges gelesen, unter anderem hier im Forum, kann das aber offensichtlich nicht umsetzen bzw. habe es nicht ganz verstanden.

Ich möchte die Rotationsmatrix berechnen für 45 Grad Rotation um die X-Achse und 45 Grad Rotation um die Z-Achse.

Für die x-Rotation gilt ja:

1 0 0
0 c -s
0 s s

Für die z-Rotation gilt:

c -s 0
s c 0
0 0 1

Bei 45 Grad macht das für die x-Achse:

1 / 0 / 0
0 / 0,707... / -0,707...
0 / 0,707... / 0,707...

Für die Z-Achse:

0,707... / -0,707... / 0
0,707... / 0,707... / 0
0 / 0 / 1

So wie ich es verstanden habe muss ich jetzt X * Z rechnen. Was falsch sein muss! Warum?

Nun, wenn ich mit dem Tool Matrix Control den Befehl 45, 1, 0, 1 ausführen lasse kommt folgende Matrix dabei raus:

0.853... / -0.5 / 0.146...
0.5 / 0.707... / 0.5
0.146... / 0.5 / 0.853...

Und das weicht erheblich von dem ab, was heraus kommt wenn ich X*Z rechne.

Kann mir jemand den Rechenweg kurz aufzeigen? Wäre super.

Vielen Dank

Die mit den Matrix kämpfende Alexa


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jun 29, 2009 16:34 
Offline
DGL Member

Registriert: Sa Aug 09, 2008 09:07
Beiträge: 112
Der Befehl von OpenGL macht etwas anderes. Du gibst mit den 3 Argumenten einen Einheitsvektor an um den du die ganze Sache drehen willst. Das 1. Argument ist dann nur noch der Winkel.

http://de.wikipedia.org/wiki/Drehmatrix
Unter 'Drehmatrizen des Raumes R³' findest du dann auch die Matrix die in OpenGL verwendet wird.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jun 29, 2009 17:45 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Wie Andreas schon sagt, das drehen um 45 Grad auf der Achse (1,0,1) ist etwas anderes als drehen um 45 Grad auf der Z-Achse und anschließendes drehen um 45 Grad auf der X-Achse. Es kommt auch nochmal was anderes raus wenn du zuerst um die X-Achse und dann um die Z-Achse drehst.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jun 29, 2009 19:30 
Offline
DGL Member

Registriert: Fr Jun 26, 2009 14:38
Beiträge: 3
Danke für die Antworten.

Wahrscheinlich habe ich mein Problem falsch beschrieben bzw. habe ich immer noch Schwierigkeiten:

Angenommen ich möchte mein Objekt um 45 Grad drehen sowohl auf der x-Achse als auch auf der z-Achse.

Mir ist bewusst, dass das Ergebnis anders ist wenn ich zunächst um x und dann um z drehe als wenn ich zuerst um z und dann um x drehe.

Ich dachte ich kann das als "EINE Drehung" ausführen lassen indem ich eine Matrix dafür berechne und somit nicht mehr auf die Reihenfolge achten muss.

Geht das gar nicht? *Verwirrt*


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jun 29, 2009 19:42 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
Geht das gar nicht? *Verwirrt*

Doch. Du berechnest eine Matrix für die Rotation um die X-Achse und eine Matrix für die Matrix um die Z-Achse. Wenn du die beiden Matrizen in der gewünschten Reihenfolge multiplizierst, erhälst du die gesuchte Matrix die beide Operationen durchführt.

Wenn du nun in einem Schritt direkt auf die Matrix kommen möchtest...hm...also dafür ist es sinnvoll zu wissen was man da eigentlich so treibt:
Genau genommen führst du da einen Basiswechsel durch. Eine Basis ist in unserem Fall eine Menge von 3 linear unabhängigen Vektoren. Bei einem Punkt den du reinsteckst sind die Koordinatenachsen (1,0,0), (0,1,0) und (0,0,1). Wenn du nun eine 3x3 Matrix hast die so aussieht
Code:
  1. X.x Y.x Z.x
  2. X.y Y.y Z.y
  3. X.z Y.z Z.z

wechselst du zur Basis mit den Koordinatenachsen X, Y und Z. Es reicht also die gewünschte Drehung für die drei Koordinatenachsen durchzuführen und daraus eine Matrix zu bauen. Um das zu verstehen ist es ganz gut sich die Rotationsmatrizen einmal daraufhin genauer anzuschauen.

In der Computergrafik (und in OpenGL) sind die Matrizen üblicherweise 4x4. Mit der zusätzlichen Dimension kann man dann auch Translation und perspektivische Projektion darstellen.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jun 29, 2009 21:48 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Unser Tutorial_Nachsitzen könnte dich vielleicht auch interessieren.
Was fürs Auge gibts im Tutorial_Matrix2.
Und allgemeines zum Thema Matrix. Dort ist auch das CompGeo Script von der TU Chemnitz verlinkt, welches quasi als Tafelwerk dienen kann.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jun 30, 2009 08:25 
Offline
DGL Member

Registriert: Fr Jun 26, 2009 14:38
Beiträge: 3
Danke für Eure Hilfe.

Da habe ich wohl noch einiges zu lesen und zu lernen.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.013s | 15 Queries | GZIP : On ]