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

Aktuelle Zeit: So Jul 27, 2025 11:50

Foren-Übersicht » DGL » Feedback
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Herleitung im Mathe-Tutorial
BeitragVerfasst: So Apr 11, 2004 12:15 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jun 19, 2003 10:44
Beiträge: 991
Wohnort: Karlsfeld (nahe München)
Ich las mir mal gerade das Mathe-Tutorial durch, in der Hoffnung vielleicht doch noch etwas brauchbares zu entdecken.
Und siehe da :D , wenn man nicht gleich nach dem ersten Blick aufhört zu lesen erfährt man wie OpenGL die Rotationen und Verschiebungen anstellt. Es erklärte auch woher der Name Matrix in OpenGL kommt, allerdings hätte ich gerne noch mehr Informationen zu dem Thema Matrizen gehabt.
So wird nur kurz auf den obrigen Kreis verwiesen um zu erkären was die Matrix mit einem Vertex macht.
Dabei war mir das nun überhaupt nicht klar wie er sich mal so eben aus dem oberen Kreis die Matrix Rechnung ableitet.

Ich habe danach mal versucht irgendwie auf diese Formel zu kommen.
Also nehme ich mal die Formel für X aus einer Matrix die nur die rotation um die X Achse beschreibt
Zitat:
X'= cos(alpha)*X - sin(alpha)*Y

Jetzt gehe ich mal davon aus das ich das mit dem Sinus und Cosinus nicht weis:
Dass der neue X Wert vom alten X Wert und Y Wert abhängt ist klar.
Zitat:
X'= a*X+b*Y

Nun nehme ich mal an ich hätte den Punkt (3/0) und drehe ihn um den Ursprung,
o dass ich den Y Wert nicht zu beachten brauche:
Zitat:
0°: X' = 3 = 1*X => bei 0° ist a1
90°:X'= 0= 0*X => bei 90° ist a 0
180°:X'= -3 = -1*X => bei 180° ist a -1
270°:X'= 0=0*X => bei 270° ist a 0

Und auch bei dem Punkt (-2/0) hat a für die gleichen Grad zahlen den gleichen Wert:
Zitat:
0°: X' = -2 = 1*X => bei 0° ist a1
90°:X'= 0= 0*X => bei 90° ist a 0
180°:X'= 2 = -1*X => bei 180° ist a -1
270°:X'= 0=0*X => bei 270° ist a 0

Vermutung: Nehme ich den Cosinus aus den Gradzahlen erhalte ich a:
Zitat:
1=cos(0°)
0=cos(90°)
-1=cos(180°)
0=cos(270°)

Ok, jetzt das ganze noch mit den Punkt (0/-4):
Zitat:
0°: X' = 0 = 0*Y => bei 0°ist b=0
90°:X'= 4 = -1*Y => bei 90° ist b=-1
180°:X'= 0 = 0*Y => bei 180° ist b=0
270°:X'= -4 = 1*Y => bei 270° ist b=1

Zur Sicherheit noch mal mit dem Punkt(0/7)
Zitat:
0°: X' = 0 = 0*Y => bei 0°ist b=0
90°:X'= -7 = -1*Y => bei 90° ist b=-1
180°:X'= 0 = 0*Y => bei 180° ist b=0
270°:X'= 7 = 1*Y => bei 270° ist b=1

Vermutung: Nehme ich den negativen Sinuns aus den Gradzahlen erhalte ich b:
Zitat:
b= -sin(alpha)
1=-sin(0°)
0=-sin(90°)
-1=-sin(180°)
0=-sin(270°)

Setze ich das dan ein erhalte ich:
Zitat:
X'= cos(alpha)*X - sin(alpha)*Y

Oder auch:
Zitat:
X'= X*cos(alpha) - Y*sin(alpha)

Für den Y Wert kann man sich das auch machen:
Zitat:
Y'=sin(Alpha)*X+cos(Alpha)*Y

Wie leitet Delphic sich das alles so schnell und sicher her, und warum Spaltenweise wenn doch Zeilenweise gerechnet wird?
Ausschnitt aus dem Tutorial:
Zitat:
Der X-Achsen Einheitsvektor(1.0, 0.0, 0.0) verändert sich hingegen schon. Mithilfe von Trigonometrie kommt man schnell auf der Lösung Spur. Ein Blick auf das Bild zum Einheitskreis zeigt schnell, dass wir gerade das gleiche Problem zu bewältigem haben: Die Rotationsachse ist in beiden Fällen die Z-Achse. Der Einheitsvektor, der gedreht wird, ist die X-Achse:
x = cos(ß)
y = sin(ß)
womit wir den Inhalt der ersten Spalte der Matrix kennen: (cos(ß); sin(ß); 0; 0)

Das lässt sich jetzt genauso auf den Y-Achsen Einheitsvektor(0.0, 1.0, 0.0) übertragen, man muss nur bedenken in welcher weise sich x und y vertauschen:
x = -sin(ß)
y = cos(ß)
So ergibt sich für die zweite Spalte: (-sin(ß); cos(ß); 0; 0)

MfG
IFlo

_________________
Danke an alle, die mir (und anderen) geholfen haben.
So weit... ...so gut


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Herleitung im Mathe-Tutorial
BeitragVerfasst: So Apr 11, 2004 13:30 
Offline
DGL Member

Registriert: Do Mai 30, 2002 18:48
Beiträge: 1617
IFlo hat geschrieben:
Wie leitet Delphic sich das alles so schnell und sicher her, und warum Spaltenweise wenn doch Zeilenweise gerechnet wird?

Es ist sehr einfach herzuleiten, wenn man anch DEM zentralen Satz in dem Tutorial sucht, der zentriert, fett und grösser als der Rest geschrieben steht:
Code:
  1.  
  2. Die Spalten
  3. sind die Bilder
  4. der Einheitsvektoren
  5.  

Hat man das verstanden - z.b. indem man das Beispiel das dazugehört angeschaut und nachvollzogen hat, dann ist diese Ableitung ein Kinderspiel.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Apr 11, 2004 16:01 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jun 19, 2003 10:44
Beiträge: 991
Wohnort: Karlsfeld (nahe München)
So wichtig kam mir der Satz aber nicht vor(Ich dachte es wäre nur abschließender Spruch :mrgreen: ).

Ich habe mir den Satz nochmal angeschaut und versucht zu verstehen was das für eine Bedeutung hat.
Nur damit ich es jetzt richtig verstanden habe, diese Einheitsvektoren sind nichts anders als die Achsen meines Koordinaten Systemes und haben daher in ihrem Urzustand nur einen 1er Wert. Eben diese Einheitsvektoren werden nun gedreht, und somit das gesamte Koordiaten System. Die gedrehten Einheitsvektoren brauch ich dann nur noch in ihre Spalte eintragen.

Was ist wenn die Einheits-Vektoren nicht senkrecht aufeinander stehen?
Kann man sich so ein System überhaupt noch vorstellen?
(Wie im Beispiel)

MfG
IFlo

_________________
Danke an alle, die mir (und anderen) geholfen haben.
So weit... ...so gut


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Apr 11, 2004 17:43 
Offline
DGL Member

Registriert: Do Mai 30, 2002 18:48
Beiträge: 1617
Ein Einheitsvektor ist streng genommen irgendein Vektor der Länge 1 (oft auch als normiert bezeichnet). Häufig versteht man darunter aber die Vektoren, die genau 1 auf einer Komponente haben - in 3D also folgende: (1;0;0) (0;1;0) (0;0;1). Im Beispiel werden genau diese durch die Matrix gejagd: http://www.delphigl.com/res/tutorials/m ... ktoren.htm

Zitat:
Was ist wenn die Einheits-Vektoren nicht senkrecht aufeinander stehen? Kann man sich so ein System überhaupt noch vorstellen?

Wenn du damit die "Achsen" deines Koordinatensystem meinst - dann ist die Vorstellung rel. einfach. Stell dir einen Würfel vor. Halte die Bodenplatte feste und zieh den Deckel nach rechts - so ähnlich schaut dann dein System dann aus. Durch ein paar Rechnungen kann man dann zwischen solchen schiefen und dem üblichen orthonomalensystem hin und herrechnen. Grosse Freude in Schulaufgaben, in 3D Grafik kommts eher selten vor. Das rechnen mit kugelkoordinaten geht in die Richtung, ist allerdings noch eine Nummer komplizierter.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Apr 11, 2004 18:49 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jun 19, 2003 10:44
Beiträge: 991
Wohnort: Karlsfeld (nahe München)
Zitat:
Ein Einheitsvektor ist streng genommen irgendein Vektor der Länge 1 (oft auch als normiert bezeichnet).

Ein Vektor mit X = 1 und Y = 2,wie in deinem Beispiel wäre also streng genomen kein Einheitsvektor (da er Länger als 1 ist)ist aber trotzdem eine Achse.

In prinzip ist die Matri-Art die du uns da vorgestellt hast nichts anders als eine Beschreibung eines Koordinaten Systemes. Die ersten 3 Spalten Beschreiben die Achsen mit Hilfe von Vektoren und die letzte 4 Spalte ist die Position.

Wobei das durchjagen eines Vektors durch die Matrix somit auch leichter vorstellbar ist.
Hätte ich den Punkt (2/0/0) und Jage ihn durch die Matrix so wird er von 2 addierten Vektoren der X Achse beschrieben plus dem Vertex der die Postion des Koordinaten System beschreibt.
Kommen nun noch Y und Z Werte hinzu so sind dies nur noch weitere Vektoren(basiern auf den jeweiligen Achsen-Vektoren) die hinzuaddiert werden müssen.

Schaut man sich mal das einfache 2D Koordiaten System an so ist dieses auch einfach nur aus jeweils 1 Vektor für X und Y Achse zusammengesetz.
Habe ich den Punkt (0,5/3) so habe ich 3 mal den Vektor der Y Achse und einen halben Vektor der X Achse zu addieren.

Eigentlich zimlich einfach wenn man mal weis was gemeint ist.
MfG
IFlo

_________________
Danke an alle, die mir (und anderen) geholfen haben.
So weit... ...so gut


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Apr 11, 2004 19:00 
Offline
DGL Member

Registriert: Do Mai 30, 2002 18:48
Beiträge: 1617
IFlo hat geschrieben:
Ein Vektor mit X = 1 und Y = 2,wie in deinem Beispiel wäre also streng genomen kein Einheitsvektor (da er Länger als 1 ist)ist aber trotzdem eine Achse.

Nein, das ist tatsächlich kein Einheitsvektor - das ist das Bild eines Einheitsvektors, nachdem er mit der Matrix multipliziert wurde, um zu zeigen was aus (1;0;0) wird, wenn man ihn durch die Matrix des Beispiels schickt.

IFlo hat geschrieben:
In prinzip ist die Matri-Art die du uns da vorgestellt hast nichts anders als eine Beschreibung eines Koordinaten Systemes. Die ersten 3 Spalten Beschreiben die Achsen mit Hilfe von Vektoren und die letzte 4 Spalte ist die Position.

Nun, das ist ja nicht irgendeeine Matrix, sondern so in der Art sehen halt die Matrizen aus, die in OpenGl zum Einsatz kommen. Sie beinhalten soz. die Regeln zum verschieben, skalieren, rotieren, etc. von Vektoren, wobei die letzte Spalte die Verschiebung angibt.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Apr 12, 2004 11:15 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jun 19, 2003 10:44
Beiträge: 991
Wohnort: Karlsfeld (nahe München)
Zitat:
Nun, das ist ja nicht irgendeeine Matrix, sondern so in der Art sehen halt die Matrizen aus, die in OpenGl zum Einsatz kommen.

Trifft das auch auf die PROJEKTIONS_MATRIX zu?

Ich glaube ich habe nämlich mal diese Matrix mit gltranslate unf glrotate verändert. Hat aber keinen Unterschied zur MODELVIEW_MATRIX gemacht, außer das was ich in der PROJEKTIONS_MATRIX verändert hatte nicht mit dem glloadidenty Aufruf in der MODELVIEW_MATRIX zurückgesetzt wurde.

Wird das was ich mit gluperspektive setze auch in der PROJEKTIONS_MATRIX gespeichert?
MfG
IFlo

_________________
Danke an alle, die mir (und anderen) geholfen haben.
So weit... ...so gut


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Apr 12, 2004 14:30 
Offline
DGL Member

Registriert: Do Mai 30, 2002 18:48
Beiträge: 1617
wenn du gluPerspective verwendest, multipliziert gluPerspective deine damit gemachten Einstellungen mit der aktuell gewählten Matrix. Wenn du in die Projektionsmatrix die Identitätsmatrix mit glLoadIdentity setzt, dann in die Modelview Matrix wechselst und dort gluPerspective verwendest, hättest du denselben Effekt, aber es ist sinnvoll das nicht zu tun und eine Matrix für Projektionen und eine für Modelle getrennt zu haben.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Apr 12, 2004 19:54 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Ich verweise hier mal auf die Linksektion. 8) Dort ist ein Link auf das Computergemotrie Script meines Mathe Dozenten (Dr. Pester).
In dem Script ist die (komplette) Mathematiktheorie erklärt die OpenGL zu grunde liegt. Da sind dann auch die diversen Drehungs-, Scalierungs-, Translations- und Schehrungsmatrizen drin. Und noch einiges mehr.

Wenn du dich für sowas interessierst, solltest du dier das mal durchlesen.

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


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 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:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.018s | 18 Queries | GZIP : On ]