Wofür braucht man denn eine 4x4 Matrix ?
-
Hi,
Kann mit jemand erklähren wofür diese ja/gut sein soll ?
Und warum muss ich x,y,z durch w' teilen, wenn die 4. Komponennte der Matrix != 1 ist ?a | (x*m11)+(y*m21)+(z*m31)+(1*m41) | | m11 m12 m13 m14 | | -------------------------------- | [x y z 1]x | m21 m22 m23 m24 | = | w' | | m31 m32 m33 m34 | | (x*m12)+(y*m22)+(z*m32)+(1*m42) | | m41 m42 m43 m44 | | -------------------------------- | | w' | | (x*m13)+(y*m23)+(z*m33)+(1*m43) | | -------------------------------- | | w' | | 1 | w' = (x*m14)+(y*m24)+(z*34)+(1*44)
( siehe Seite 63 von Spiele Programmiereung ) von David Scherfgen
Und nochwas... Warum ist hier in der 4x4 matrix die 4. Komponennte verwendet worden ? das sollte eine Translationsmatrix sein. Eine Matrix wird doch ganz anders mit einem Vector multipliziert ??
b | 1 0 0 0 | [Xp Yp Zp 1]x | 0 1 0 0 | = [Xp + Xt Yp + Yt Zp+Zt 1] | 0 0 1 0 | | Xt Yt Zt 1 |
Find ich irgentwie nicht logisch
normalerweise wendet man eine Matrix auf einen Vector anders an oder ?
x = Zeile1Spalte1
y = Zeile2Spalte2
z = Zeile3*Spalte3
1 = 1 ?hmm.. da würde was komplett anderes rauskommen als oben ( b )!!
Also wo liegt mein Fehler ... bin hier am verzweifeln ..
Danke & cu
-
Transformationen im R3 sind keine liniaren berechnungen. "Schiebt" man die berechnung aber in den R4 so ist dies eine Matrizenmultiplikation, und somit ein lineares Problem.
-
also als erstes solltest du wissen dass das ne direct3d matrix ist, im vergleich zu allen anderen firmen/menschen verwendet microsoft die transponierte matrix, die dann im treiber aber wieder zurück gedreht wird (oder von dem coder selber wenn er shader verwendet
)
eine 4x4 matrix wird verwendet um eine projektion durchzuführen, es wird durch die 4te komponente geteilt, weil dadurch die projektion entsteht.
normalerwese würde eine 4x3 bzw 3x4 matrix ausreichen um die transofrmationen durchzuführen (gibt engines die das als optimierung im scenenbaum verwenden).rapso->greets();
-
Hi,
@xroads42:
Kannst du deine Aussage vielleicht ein bisschen genauer beschreiben ?@rapso:
Was ist der Sinn, einer transponierte Matrix und warum macht das Microsoft ?Was ist das für eine Projektion die da statt findet ?
Bye
-
also es ist wohl kein bug, weil ich leute kenne die sofort nach dem erscheinen der matrizen zu MS schrieben dass die transponiert sind und MS meinte dass das absicht ist.
Der einzige grund den ich sehe, wäre nicht kompatibel zu opengl zu sein. es gibt mehrere eigenartigkeiten von d3d die es nervig machen ne engine für beides zu schreiben z.B. andere texturmapping berechnungen (texelcenter)... nen anderen grund gibt es wohl nicht, da die hardwarehersteller sonst immer sehr einfluss auf d3d nehmen und die intern mit "richtigen" matrizen rechnen.die projektion... es ist keine spezielle, die ganz normale
-objekt ist weit weg, wird durch großen wert geteilt, erscheint klein z.B. auf dem bildshirm.
-objekt nah dran, durch kleinen wert geteilt, erscheint gross.rapso->greets();
-
Hi,
Der einzige grund den ich sehe, wäre nicht kompatibel zu opengl zu sein.
Hm, Ist ja im Prinzip egal vom es kompatibel ist.
die projektion... es ist keine spezielle, die ganz normale
-objekt ist weit weg, wird durch großen wert geteilt, erscheint klein z.B. auf dem bildshirm.
-objekt nah dran, durch kleinen wert geteilt, erscheint gross.Wird das nicht durch die Z koordinate gemacht gemacht ?
Sry, dass ich das frage, aber ich versteh das einfach nicht, wofür eine 4x4 matrix verwendet wird .. bringt das einen geschwindikeits Vorteil ?
Ich denke:
hab ne 3x3 Matrix die zb. einen Vector um x(y/z) dreht und wende sie auf meinen Vector an. ( das macht mein Device ) Und die Projektionsmatrix die ich meinem Device am Anfang mitteile übernimmt den Rest wofür brauch ich da noch eine extra Projektions angabe in der Transformationsmatrix ?
Bye
-
> hab ne 3x3 Matrix die zb. einen Vector um x(y/z) dreht
wie willst du mit einer 3,3-Matrix eine Translation beschreiben?
-
nemexxl schrieb:
Find ich irgentwie nicht logisch
normalerweise wendet man eine Matrix auf einen Vector anders an oder ?
Nein. Aus der Schule oder von der Uni kennst Du wahrscheinlich hauptsächlich Zeilenvektoren. Microsoft arbeitet bei Direct3D mit Spaltenvektoren. Probier's aus mit Derive - Du wirst sehen, dass die Rechnung richtig ist.
-
Kleine Ergänzung:
Wenn man eine Matrix als kurzschreibweiße eines Lineares Gleichungssystems auffasst macht es durchaus Sinn mit Zeilenvektoren zu arbeiten
-
Hi,
> hab ne 3x3 Matrix die zb. einen Vector um x(y/z) dreht
wie willst du mit einer 3,3-Matrix eine Translation beschreiben?Jo, jetzt ist es mir klar, dass ich einen Translation nur mit einer 4x4 matrix beschreiben kann.
Brauch ich eine 4x4 Matrix für andere Zwecke ?
@TomasRiker:
Kann irgentwie mit deinem Post nichts anfangenWas meinst du mit "Derive". => Meinst du "Device" ?
Werden dann Zeilenvektoren und Spaltenvectoren anders mit einer Matrix multipliziert ?
Hm, und kann ich meinem Device dann mitteilen, wie ich die Matrix mit dem Vektor multiplizieren will, außer selbst einen Shader zu schreiben ?
Wenn ich das so einigermaßen verstanden haben
ist mir doch noch eins unklar ..
Was meinte rapso mit Projektion und 4x4 matrix ?
eine 4x4 matrix wird verwendet um eine projektion durchzuführen, es wird durch die 4te komponente geteilt, weil dadurch die projektion entsteht.
Ich verstehe immernoch nicht warum das durch die 4. komponente geteil wird ? Und was es hier mit der Projektion auf sich hat ?
Ich denke ( wie ich oben erwähnt hatte ) meine Projektionsmatrix erledigt den Kram und ich wüsste jetzt nicht was ich noch für eine Projektion bräuchte ..
Bye
-
nemexxl schrieb:
Hi,
@xroads42:
Kannst du deine Aussage vielleicht ein bisschen genauer beschreiben ?Genau erklären kann ich das nicht, dazu müßte ich die Unterlagen aus den 1. Sem rauskramen
Aber ein paar erleuterungen:
R3= "Alles was 3d ist"R4 = würde hier 4 dim bedeuten. Eigenlich im Mathematischen sinne bedetet das das du mit 4 werten arbeitest. daher auch eine 4x4 matrix
lineares Prob: ein Problem welches mit hinzuname von n zu berechenden werten nur max. n mehr berchnungsschritte braucht
nicht lin. prob: ein Problem welches mit hinzuname von n zu berechenden werten meist mehr als n berchnungsschritte braucht (n² wäre noch relativ gut; n^n schon gar nicht mehr so toll)
-
-
Hallo,
um noch mal auf die frage von den sinn von matrizen zurückzukommen.
Für eine verschiebung (translation) braucht man eigentlich keine Matrix. Man muß einfach nur auf die jeweilgen komponenten (x,y,z) einen wert addieren.
Jetzt gibt es aber das Problem das man noch rotieren möchte, und das möglichst schnell. Möchte man z.B. eine Objekt, welches auf den Punkt p=(a,b,c) liegt um sich selbst rotieren lassen, so muss man es erst in den ursprung (0,0,0) schieben dann drehen und dann wieder zurückschieben. Und dass geht am besten mit Matrizen:
T1 zum schieben in den Ursprug
R zum Rotieren
T2 zum zurückschieben#Jetzt muss man "nurnoch" folgende operation ausführen:
T1*R*T2*pund schon ist der Punkt p gedreht.
(kann sein das ich die reihenfolge der Multiplikation vertauscht habe; is schon länger das ich micht damit beschäftigt habe)
-
Hi,
Danke für deine kurzbeschreibung. Der Sinn der Matrizen war mit schon klar. Nur der Sinn einer 4x4 Matrix nicht.
Aber jetzt weiß ich ja, dass es Sinnvoll ist eine 4x4 Matrix für Translation zu verwenden um ein linares Problem zu haben.
Wird eine 4x4 Matrix für noch etwas verwendet ?
Bye
-
Hi,
Da ist nochwas, wo Transponiert Direct3D die Matrix und wo "re" - Transponiert Direct3D die Matrix wieder ?
Bye
-
nemexxl schrieb:
@TomasRiker:
Kann irgentwie mit deinem Post nichts anfangen
Was meinst du mit "Derive". => Meinst du "Device" ?Nein, Derive! Das ist ein sehr gutes Mathematikprogramm, das so gut wie alles lösen/rechnen kann. Ich denke, Deine anderen Fragen ergeben sich aus diesem Missverständnis
-
> wird eine 4x4 Matrix für noch etwas verwendet?
man kann damit z. B. Lineare Gleichungssysteme lösen (siehe Gauß)
such einfach mit Google nach dem Thema "Matrix" und du wirst viele Anwendungsbereiche von Matrizen finden