Projektions-Matrix

Fragen zu mathematischen Problemen
Empire
Beiträge: 272
Registriert: Mo Jan 26, 2009 5:36 pm

Projektions-Matrix

Beitrag von Empire » Di Feb 01, 2011 7:42 pm

HI zusammen,
Als Schulprojekt hab ich schon ein kleines "3D" Spiel geschrieben.
(in etwa so: http://armorgames.com/play/7558/starlight-xmas)
Jetzt will ich ein bisschen mehr mit 3D machen.
Dafür bräuchte ich aber eine Projektions-Matrix.
Heute und gestern hab ich nichts anderes gemacht wie danach zu googeln,
hab aber nichts gefunden.

Kann mir bitte jemand erklären wie sich eine Projektions-Matrix zu-
sammen setzt?
Matrix-Multiplikation kann ich.

mfg
Empire

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: Projektions-Matrix

Beitrag von Kerli » Di Feb 01, 2011 9:14 pm

Willst du dir die Projektionsmatrix selber herleiten und erstellen oder einfach nur eine vorgefertigte Funktion für ein bestimmtes Framework wissen? Wenn du es dir selber herleiten möchtest dann zeichne dir das ganze doch einmal in 2D von oben auf und überlege dir welche Zusammenhänge durch vorhandene ähnliche Dreiecke sich ausnützen lassen bzw. was das Ergebnis sein sollte wenn du die Matrix und einen Vektor einer virtuellen Position in Bildschirmkoordinaten umrechnen möchtest.
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Projektions-Matrix

Beitrag von Xin » Mi Feb 02, 2011 12:14 am

Empire hat geschrieben:Jetzt will ich ein bisschen mehr mit 3D machen.
Dafür bräuchte ich aber eine Projektions-Matrix.
Heute und gestern hab ich nichts anderes gemacht wie danach zu googeln,
hab aber nichts gefunden.
Was genau brauchst Du denn?
Empire hat geschrieben:Kann mir bitte jemand erklären wie sich eine Projektions-Matrix zu-
sammen setzt?
Matrix-Multiplikation kann ich.
Grundsätzlich stellt sich die Frage, wofür eine Projektionsmatrix da ist. Es wird damit ausgerechnet, wenn ein Punkt bei (a, b, c) liegt, wohin er projiziert wird. Bei der Identität

Code: Alles auswählen

1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
wird die Koordinate

Code: Alles auswählen

1    X-Koordinate
0    Y
0    Z
1    Weight
auf den Punkt

Code: Alles auswählen

1   1 0 0 0     1
0   0 1 0 0     0
0 * 0 0 1 0  = 0
1   0 0 0 1     1
abgebildet. Wir haben die identische Abbildung.

Wenn Du nun das Bild in X-Richtung strecken möchtest, muss die X Koordinate gestreckt werden.

Code: Alles auswählen

1   2 0 0 0     2
0   0 1 0 0     0
0 * 0 0 1 0  = 0
1   0 0 0 1     1
Der Punkt 1/0/0 wird also nach 2/0/0 projiziert.

So kannst Du auch einfach die Achsen vertauschen:

Code: Alles auswählen

1   0 1 0 0     0
0   1 0 0 0     1
0 * 0 0 1 0  = 0
1   0 0 0 1     1
Der Punkt 1/0/0 wird also nach 1/0/0 projiziert.

Durch eine Rotationsmatrix kannst Du nun die Darstellung im Raum verdrehen. Skalierung findet über

Code: Alles auswählen

X 0 0 0
0 Y 0 0
0 0 Z 0
0 0 0 1
statt, Translation (Verschiebung ist unabhängig von der Koordinate):

Code: Alles auswählen

1 0 0 X
0 1 0 Y
0 0 1 Z
0 0 0 1
Und die Rotation beeinflusst den Großteil der Matrix.

Code: Alles auswählen

R R R 0
R R R 0
R R R 0
0 0 0 1
Wie sich die Zentralprojektion daraus ergibt, muss ich aber ggfs. nochmal nachschlagen.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Empire
Beiträge: 272
Registriert: Mo Jan 26, 2009 5:36 pm

Re: Projektions-Matrix

Beitrag von Empire » Mi Feb 02, 2011 4:17 pm

Ich meinte wie ich die 3D Koordinaten auf meinen 2D Bildschirm bekomme.
Dachte dazu bräuchte ich die Projektions-Matrix.

mfg
Empire

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: Projektions-Matrix

Beitrag von Kerli » Mi Feb 02, 2011 4:38 pm

Empire hat geschrieben:Dachte dazu bräuchte ich die Projektions-Matrix.
Richtig. Die Frage ist jedoch immer noch, willst du wissen wie du dir herleitest wie das funktioniert, oder interessiert dich nur das Endergebnis, also nur was du wo in die Matrix eintragen musst. Ich hab das vor Ewigkeiten schon einmal selbst hergeleitet und ein bisschen (wirklich nur ein bisschen :)) mitgeschrieben: http://wiki.tomprogs.at/math:matrix
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Projektions-Matrix

Beitrag von Xin » Mi Feb 02, 2011 4:40 pm

Empire hat geschrieben:Ich meinte wie ich die 3D Koordinaten auf meinen 2D Bildschirm bekomme.
Dachte dazu bräuchte ich die Projektions-Matrix.
Erstmal musst Du klarstellen, welche Projektion Du überhaupt haben möchtest - entsprechend muss man die Projektionsmatrix aufbauen.
Ansonsten ist das nur die Multiplikation des Modellpunktes mit der Projektionsmatrix.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Empire
Beiträge: 272
Registriert: Mo Jan 26, 2009 5:36 pm

Re: Projektions-Matrix

Beitrag von Empire » Mi Feb 02, 2011 7:02 pm

Also ich glaube ich brauche eine perspektivische Projektion.
Ich will das Objekt nicht Strecken, verschieben oder die Größe ver-
ändern sondern nur für den Bild "bereit" machen.
Mich interesiert nicht nur das Ergebnis sondern auch wie ich da
hin komme.

Code: Alles auswählen

Lefthand
        width2near 0 0 0 0 height2near 0 0 0 0 near−farnear+far near−far2nearfar 0 0 −1 0          
xt=xwidth2near
yt=yheight2near
zt=−zfarfar−near+far−nearfarnear
w=z
Ich glaube das ist es(es kommt den Googel Treffern am nähsten),
kann mir das bitte jemand erklären

mfg
Empire

EDIT:
OK man sieht es nicht sonderlich gut. es stammt von hier http://wiki.tomprogs.at/math:matrix
Es ist das Lefthand ding. Achja wo ist der unterschied zum Righthand?

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Projektions-Matrix

Beitrag von Xin » Mi Feb 02, 2011 7:54 pm

Empire hat geschrieben:Also ich glaube ich brauche eine perspektivische Projektion.
Ich will das Objekt nicht Strecken, verschieben oder die Größe ver-
ändern sondern nur für den Bild "bereit" machen.
Definiere "bereit" machen?

Womit arbeitest Du überhaupt. Wenn es OpenGL ist, was spricht gegen gluPerspective?
Empire hat geschrieben:OK man sieht es nicht sonderlich gut. es stammt von hier http://wiki.tomprogs.at/math:matrix
Es ist das Lefthand ding. Achja wo ist der unterschied zum Righthand?
Bei Matrizen ist es wichtig, dass A*B != B*A ist.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: Projektions-Matrix

Beitrag von Dirty Oerti » Mi Feb 02, 2011 8:55 pm

Bei Matrizen ist es wichtig, dass A*B != B*A ist.
Außer bei speziellen Drehmatrizen ;)
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne! :)
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: Projektions-Matrix

Beitrag von Kerli » Do Feb 03, 2011 1:06 am

Dirty Oerti hat geschrieben:
Bei Matrizen ist es wichtig, dass A*B != B*A ist.
Außer bei speziellen Drehmatrizen ;)
Oder noch viel einfacher bei der Nullmatrix oder Einheitsmatrix :P
Empire hat geschrieben:Mich interesiert nicht nur das Ergebnis sondern auch wie ich da
hin komme.
Bevor ich jetzt lange hier herumschreibe habe ich mir jetzt die Mühe gemacht das gleich einmal ins Wiki zu stellen: http://proggen.org/doku.php?id=theory:m ... projection
Empire hat geschrieben:Es ist das Lefthand ding. Achja wo ist der unterschied zum Righthand?
Halte die linke Hand vor dich und bilde mit Daumen, Zeigefinger und Mittelfinger ein Koordinatenystem. Dabei zeigt der Daumen in positive z-Richtung, der Zeigefinger in positive y-Richtung und der Mittelfinger in positive x-Richtung. Jetzt wiederholst du das ganze mit der rechten Hand und wirst sehen, das dabei die Richtung der z-Achse umgedreht ist.
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

Antworten