Matrizen und 3D-Programmierung
-
Hi,
so, meine erste FrageIch verstehe zwar was Vektoren (oder Vetrizen?!) sind, und wie man sie multipliziert, ich weiß auch wie man Vetrizen mit einer Matrix multipliziert - aber ich habe keine Ahnung wofür das gut sein soll. Soweit bin ich schon: Durch Multiplikation mit einer Matrix kann man die Vektoren (Vetrizen?! :D) transformieren. Aber warum ist das so? Welche Werte müssen in die Matrix, und wie kommt man darauf?!
Es gibt doch unter OpenGL solche Befehle wie "glTranslate", "glRotate", ... Führen die die Vektor/Matrix Multiplikation durch?
Versteht ihr meine Problem... Ich weiß wie man es anwendet, aber nicht warum... Helft einem armen 10t Klässler auf die Sprünge
THX, Michi
-
Es heißt auf jeden Fall Vektoren! Nicht Vetrizen... das hab ich noch nie gehört.
Die gl-Befehle funktionieren übrigens tatsächlich per Matrix.
Um besser zu verstehen wie die Matrix-Operationen wirken kann ich Dir nur empfehlen mal ein paar durchzurechnen.Bei Spielen ist es ja meist 3D, das heißt, man hat x,y,z als Koordinaten. Jetzt ist es aber so, daß wenn man den mit ner 3x3-Matrix transformiert, egal welche Matrix man nimmt der Vektor (0,0,0) wird immer wieder auf sich selbst abgebildet. Rechne das mal nach, dann siehst Du es. Deswegen bläst man den Vektor ein bißchen auf und spendiert ihm eine vierte Komponente, die heißt oft w und man setzt sie auf 1. Das heißt der Vektor ist (x,y,z,1).
Um jetzt zu verstehen was passiert, wenn man den mit einer 4x4-Matrix multipliziert sollte man die Rechnung mal von Hand durchführen.
Zum Beispiel Multiplikation mit folgenden Matrizen:Dieses hier heißt Einheitsmatrix, warum? (1 0 0 0) (0 1 0 0) (0 0 1 0) (0 0 0 1) glScale verursacht sowas: (sx 0 0 0) (0 sy 0 0) (0 0 sz 0) (0 0 0 1) Was macht das hier mit einem Vektor? (1 0 0 tx) (0 1 0 ty) (0 0 1 tz) (0 0 0 1)
Nimm einfach mal den Vektor (x,y,z,1) als Spaltenvektor, also senkrecht geschrieben und multiplizier die Matrizen mal von links dran. Schau Dir an was passiert und versuche das Ergebnis geometrisch zu interpretieren.
MfG Jester
-
Ich verstehe zwar was Vektoren sind, und wie man sie multipliziert,...
echt? wie denn
-
Skalarprodukt?
Kreuzprodukt?
-
Wird doch alles in deinem Buch erklärt, TomasRiker, oder liege ich da völlig daneben? Aber wie gesagt, das *warum* fehlt mir da ein bisschen...
-
XDVD schrieb:
Wird doch alles in deinem Buch erklärt, TomasRiker, oder liege ich da völlig daneben? Aber wie gesagt, das *warum* fehlt mir da ein bisschen...
stelle dir mal vor, du hast eine Firma. Du hast drei Rohstoffe und erzeugst daraus vier Zwischenprodukte.
das kann man schön in eine Rohstoff- und Zwischenproduktmatrix aufschreiben.
ergibt eine 3x4 Matrix.So jetzt hast du auch aus diesen vier Zwischenprodukten zwei Endprodukte gemacht. Das lässt sich auch in eine Matrix schreiben. Wäre eine 4x2 Matrix.
So jetzt möchtest du aber wissen wieviel Rohstoffe denn die Endprodukte verbrauchen. Also Multiplizierst du die Matrix mit den Rohsotffen und Zwischenprodukten mit der der Zwischenprodukten und Endprodukten.
3x4 Matrix * 4x2 Matrix = 3x2 Matrix
als Ergebniss bekommst du eine Matrix in der du ablesen kannst wieviel Rohstoffe du für die Endprodukte verbrauchst.
-
ich versuche dir das warum an einem etwas komplexeren beispiel zu erklären,an dem aber auch ich das problem gelernt hab: die vektordrehung.
nehmen wir mal an, du hast einen gegenstand mit 4 eckpunkten(jeweils x/y/z wert)(mach dir am besten ein koordinatensystem,dann kannste die schritte verfolgen)
nun multiplizierst du jeden punkt mit dieser matrix:(alpha=40)
(cos alpha sin alpha 0 )
(-sin alpha cos alpha 0 )
(0 0 1 )
(0 0 0 )die ergebnisse notierst du dir wieder in dein koordinatensystem, und schreibst es dir auf
so, nun beobachtest du etwas,und fragst dich bestimmt wieso
die matrix mit der du grad gerechnet hast, ist eigentlich nur eine optische vereinfachung zu dieser rechnung:
x'=x*cos alpha+y*(-sin alpha)
y'=x*sin alpha+y*-sin alphaes gibt insgesamt 4 matrizen, die für die 3dprogramierung intressant sind: rotationsmatrix(also das oben genannte) skalierungsmatrix(vergrößern eines gegenstandes),und translationsmatrix(verschieben eines gegenstandes).
die translationsmatrix ist die einfachste matrix.
sie ist jediglich eine vektoradditiondie skalierungsmatrix.
sie entsteht durch einfache multiplikation der koordinaten mit einer zahl.
die wirkungen sind auch ziemlich nice. wenn du einen punkt 0/0 und 0/3 hast, und die y koordinate mit 3 multiplizierst, erreichst du eine verdreifachung des abstands zwischen den beiden punkten,du vergrößerst den gegenstanddie kameramatrix(ich verzichte mal auf ihre erklärung, da ich die dahinterliegenden berechnungen noch nich ganz kapiert hab, die kameramatrix lässt dich den gegenstand nur aus einer betrachterperspektive sehen)
achja, was zu beachten ist, wenn du in nem 3dprogramm gegenstände mit matritzen bearbeitest:erst rotieren, dann skalieren, und zum schluss translatieren, sonst erhälst du verfälschte rotationswerte.
-
Danke@Otze... hast mir ne Menge Schreibarbeit erspart Die Rotationsmatrix wollte ich auch aufführen, gg...
-
THX, jetzt habe ich es verstanden Es ist richtig cool, die Sachen, die sonst OpenGL verschleiert, richtig selbst zu rechnen und auf dem Papier auszuprobieren Vielen Dank an alle!
@Jester (SORRY! ) Wenn das Aufgaben waren Die Einheitsmatrix macht nichts (mal 1), die zweite (wer hätts gedacht) skaliert einen Vektor um einen zweiten Vektor s und die Dritte versetzt einen Vektor um die Vektor t... richtig?
Jetzt habe ich aber noch ein zweites Problem... ich habe keine Ahnung was Cosinus und Sinus sind?! Bitte helft mir nochmal
Bye, Michi
-
ohne zeichnung wirds schwer...
ok, versuchen wirs mal so:zeichnen einen kreis mit dem radius 5.
in diesen kreis zeichnest du vom mittelpunkt des kreises aus 2 geraden(bitte mach einen winkel<90°)nun nimmst du dir den schnittpunkt der einen geraden mit dem kreis"rand" und zeichnest von dieser stelle aus im 90°winkel von der schneidenden geraden in richtung der 2. gerade eine weitere linie.
diese 3 geraden bilden nun ein rechtwinkliges dreieck.
die letzte linie die du grad gezeichnet hast ist der cosinus.
der sinus ist der abschnitt der 2. geraden vom mittelpunkt bis zum schnittpunkt mit dem cosinus.aber mal ne andre frage, was ist eine koordinatensystemmatrix(kameramatrix zb)
und wie rechnet man mit ihr?
-
XDVD schrieb:
...
Jetzt habe ich aber noch ein zweites Problem... ich habe keine Ahnung was Cosinus und Sinus sind?! Bitte helft mir nochmal
Bye, Michi
Pisa???
Wie alt bist du?
Geh einfach mal auf Wikipedia und suche nach Winkelfunktion.Die tatsache das man matrizen nutzt ist einfach die, dass man eine hintereinanderausführung von transformation, rotation, scalierung ect. in einen schlag ausführen kann ( man multipliziert die matrizen "einfach" auf, in der Java OpenGL Api ist das schön zu sehen). Außerdem braucht man für die transformation von 3D nach 2d ( Bildschirm) matrizen, also warum zwischen verschiedenen berechnungsmodellen hin und her springen.
-
XDVD schrieb:
@Jansen ...
Äh, ich glaube Du verwechselst mich da
Deine Antworten sind natürlich richtig.So, und jetzt solltest Du Dir vielleicht noch anschauen, wie man die Matrizen miteinander kompiniert:
Zum Beispiel: Erst skalieren und dann verschieben... ist also S eine Skalierungsmatrix, T eine Translationsmatrix dann können wir jeden Vektor v erst skalieren und dann verschieben, indem wir folgendes Berechnen:
T*(S*v), da wir aber umklammern dürfen ist das das gleiche wie (T*S)*v, wir können also auch erst das Matrixprodukt berechnen. Der Vorteil ist jetzt der: Egal welche Transformationen wir durchführen wollen, wir brauchen nur einmal die Matrix zu berechnen und können anschließend beliebig komplizierte Operationen mit immer gleichem Aufwand auf Vektoren ausführen.
Das Assoziativgesetz spart also Rechenleistung
Versuch ruhig mal ein paar Matrizen zu multiplizieren um zu sehen, was passiert. Berechne vielleicht für eine Translationsmatrix und eine Skalierungsmatrix einmal T*S und einmal S*T und beachte die Unterschiede.
MfG Jester
MfG Jester
-
xroads42 schrieb:
XDVD schrieb:
...
Jetzt habe ich aber noch ein zweites Problem... ich habe keine Ahnung was Cosinus und Sinus sind?! Bitte helft mir nochmal
Bye, Michi
Pisa???
Wie alt bist du?es soll leute geben, die noch vor ende der 10. klasse anfangen mit 3d zu programmieren, ich persönlich hab mir sinus/cosinus vor weniger als 14 tagen beigebracht,als ich mir die rotationsmatrix erschlossen hab.
-
so vom Gefühl her würde ich sagen, dass die Frage "Was sind SIN / COS / TAN" relativ häufig gestellt wird. Wäre das nicht ein Eintrag in die FAQ Wert?
@xroads stammt der Spruch in deiner Signatur von Mephistopheles aus Goethes Faust 1?
-
lustig schrieb:
so vom Gefühl her würde ich sagen, dass die Frage "Was sind SIN / COS / TAN" relativ häufig gestellt wird. Wäre das nicht ein Eintrag in die FAQ Wert?
@xroads stammt der Spruch in deiner Signatur von Mephistopheles aus Goethes Faust 1?
ja, ich dachte das wäre klar.. sollte ich mal dazuschreiben
-
xroads42 schrieb:
lustig schrieb:
so vom Gefühl her würde ich sagen, dass die Frage "Was sind SIN / COS / TAN" relativ häufig gestellt wird. Wäre das nicht ein Eintrag in die FAQ Wert?
@xroads stammt der Spruch in deiner Signatur von Mephistopheles aus Goethes Faust 1?
ja, ich dachte das wäre klar.. sollte ich mal dazuschreiben
Klar, hat ja auch jeder Mephistopheles aus Goethes Faust 1 gelesen
-
Online schrieb:
xroads42 schrieb:
lustig schrieb:
so vom Gefühl her würde ich sagen, dass die Frage "Was sind SIN / COS / TAN" relativ häufig gestellt wird. Wäre das nicht ein Eintrag in die FAQ Wert?
@xroads stammt der Spruch in deiner Signatur von Mephistopheles aus Goethes Faust 1?
ja, ich dachte das wäre klar.. sollte ich mal dazuschreiben
Klar, hat ja auch jeder Mephistopheles aus Goethes Faust 1 gelesen
Und an den satz merkt man das du es nicht gelesen hast *gg*
-
ne, muss ich zugeben, hab ich nicht...
es ist ja auch noch niemand dadurch berühmt geworden weil er tote Menschen zitiert(Ich glaub, jetzt wirds langsam off-topic )
-
lustig schrieb:
so vom Gefühl her würde ich sagen, dass die Frage "Was sind SIN / COS / TAN" relativ häufig gestellt wird. Wäre das nicht ein Eintrag in die FAQ Wert?
Jau, da hast Du wohl recht, kann sicher nicht schaden. Sammeln wir erstmal was da alles rein soll:
- Definition(über Dreieck und über Potenzreihe)
- allgemeine Eigenschaften (z.B. periodisch, Wertebereich [-1,1])
- Additionstheoreme
- Ableitungen
- Grad vs. Bogenmaß (beliebtes Problem beim Programmieren)Was fehlt noch?
MfG Jester
-
Ich würd noch die Definition über den Einheitskreis hinzu legen, dann wird
auch die Unterscheidung Grad / Bogenmaß klarer.
-
Das meinte ich mit dem Dreieck... das legt man ja in den Einheitskreis rein.