Hoihoi! (muss mich nur wieder mal melden, sonst verstaubt mein Profil noch
)
Eins vorweg: es geht nicht ums Programmieren, sonder um die Theorie dahinter.
Ich bin gerade dabei (arbeitsbedingt) CorelDraw mit einem 3D-Modus auszustatten. Dafür habe ich mir eine kleine vba-Test-Engine zusammengebastelt, welche die grundlegenden Operationen beherscht:
- Erstellung von Translations-, Skalierungs- und Rotationsmatrizen
- Vektor in homogene 1x4 Matrix umwandeln
- Matrixaddition und -multiplikation
Ich habe im Internet zahlreiche Referenzen gefunden, die mir diese Engine möglich machten.
Zu Probezwecken wandle ich die Koordinaten eines Würfels in einzelne homogene Matrizen um. Diese werden dann nacheinander mit der View- und Rotationsmatrix multipliziert. Aus den 1x4-Ergebnis-Matrizen der Eckpunkte nehm ich mir die x und y Koordinaten raus, an denen ich dann in CorelDraw die Punkte einzeichne. Die Matrizen der Würfel-Punkte sowie die Matrix der View bleiben immer gleich. Die Rotationsmatrix wird je nachdem, um welche Achse gedreht werden soll, mit 1 Grad Plus/Minus erzeugt. Funktioniert eigentlich auch ganz gut. Nur bei mir rotiert der Würfel. Ich möchte aber, dass sich die Camera/View um den Würfel bewegt. Ich habe leider immer noch nicht genau verstanden, in welcher Reihenfolge die Matrizen zu multiplizieren sind, um gewisse Ergebnisse (wie eben das Rotieren der View) zu erziehlen. Zudem bin ich mir nicht sicher, ob meine Methode zum Rückkonvertieren von 3D zu 2D einwandfrei ist.
Wenn mir bitte die 3D-Profis unter euch die Theorie zu:
- Reihenfolge Multiplikation Projektionsmatrizen
- Konvertieren 3D-Matrix zu 2D-Vektor
erklären, oder mir gute Internetseiten/Referenzen empfehlen könnten, wäre ich sehr dankbar. Bitte wenn möglich ohne Mathematik-Kauderwelsch wie auf Wikipedia (de.wikipedia.org/wiki/Projektionsmatrix). Sprache wäre gleich, solange: de, en, it;
Ich möchte die Theorie dahinter verstehen, nicht, wie ich es umsetzen muss.
ps: sorry, wusste nicht wo ich dieses Thema am Besten hinpacken sollte: andere Programmiersprachen, Smalltalk, (Expertenrunde ist nur GM bezogen). Einfach verschieben, wenns nicht passt.

Eins vorweg: es geht nicht ums Programmieren, sonder um die Theorie dahinter.
Ich bin gerade dabei (arbeitsbedingt) CorelDraw mit einem 3D-Modus auszustatten. Dafür habe ich mir eine kleine vba-Test-Engine zusammengebastelt, welche die grundlegenden Operationen beherscht:
- Erstellung von Translations-, Skalierungs- und Rotationsmatrizen
- Vektor in homogene 1x4 Matrix umwandeln
- Matrixaddition und -multiplikation
Ich habe im Internet zahlreiche Referenzen gefunden, die mir diese Engine möglich machten.
Zu Probezwecken wandle ich die Koordinaten eines Würfels in einzelne homogene Matrizen um. Diese werden dann nacheinander mit der View- und Rotationsmatrix multipliziert. Aus den 1x4-Ergebnis-Matrizen der Eckpunkte nehm ich mir die x und y Koordinaten raus, an denen ich dann in CorelDraw die Punkte einzeichne. Die Matrizen der Würfel-Punkte sowie die Matrix der View bleiben immer gleich. Die Rotationsmatrix wird je nachdem, um welche Achse gedreht werden soll, mit 1 Grad Plus/Minus erzeugt. Funktioniert eigentlich auch ganz gut. Nur bei mir rotiert der Würfel. Ich möchte aber, dass sich die Camera/View um den Würfel bewegt. Ich habe leider immer noch nicht genau verstanden, in welcher Reihenfolge die Matrizen zu multiplizieren sind, um gewisse Ergebnisse (wie eben das Rotieren der View) zu erziehlen. Zudem bin ich mir nicht sicher, ob meine Methode zum Rückkonvertieren von 3D zu 2D einwandfrei ist.
Wenn mir bitte die 3D-Profis unter euch die Theorie zu:
- Reihenfolge Multiplikation Projektionsmatrizen
- Konvertieren 3D-Matrix zu 2D-Vektor
erklären, oder mir gute Internetseiten/Referenzen empfehlen könnten, wäre ich sehr dankbar. Bitte wenn möglich ohne Mathematik-Kauderwelsch wie auf Wikipedia (de.wikipedia.org/wiki/Projektionsmatrix). Sprache wäre gleich, solange: de, en, it;
Ich möchte die Theorie dahinter verstehen, nicht, wie ich es umsetzen muss.
ps: sorry, wusste nicht wo ich dieses Thema am Besten hinpacken sollte: andere Programmiersprachen, Smalltalk, (Expertenrunde ist nur GM bezogen). Einfach verschieben, wenns nicht passt.
"Es gibt nie ein glückliches Ende, denn es endet nichts." - Schmendrick