Vektordaten per Matrix verändern



  • Hi,

    ich habe mal ein kleines Standardproblem aus der 3D-Welt, bei dem ich erstmalig gezwungen bin, es selbst zu implementieren, da ich keine 3D Engine bzw. die dazugehörigen Bibliotheken zur Verfügung habe.

    Ich habe ein paar Vektordaten (bestehend aus x,y, und z Koordinaten) und eine dahinter geschaltete 4x4 Matrix, um diese Daten zu manipulieren. Den Skalierungs-, Translations- und Rotationsanteil der Matrix kann ich bereits problemlos verändern.

    Nun sollen die Sachen aber ausgegeben werden. Deswegen: Wie verwurste ich mir meine Eingangs-x-y-z-Koordinaten so mit der Matrix, dass ich hinterher einsprechend saklierte/verschobene/rotierte Objekte erhalte?



  • Stichwort: Matrixmultiplikation



  • Du transformierst den Vektor indem Du Matrix und Vektor miteinander multiplizierst. Wie genau hängt davon ab, wie Deine 4x4-Matrix definiert ist.

    Im Allgemeinen sind zwei Varianten üblich - befinden sich die Werte für die Translation in der 4.Spalte der Matrix (x,y,z,1), so musst Du MatrixVektor rechen, wobei der Vektor und das Ergebnis als Spaltenvektoren angesehen werden.
    Sind die Werte der Translation in der 4.Zeile der Matrix, so musst Du Vektor
    Matrix rechnen - jetzt ist der Vektor ein Zeilenvektor.

    Ein Vektor kann bei der Multiplikation als Matrix mit nur einer Spalte bzw. Zeile angesehen werden.



  • http://de.wikipedia.org/wiki/Homogene_Koordinaten wäre auch nicht ganz unwichtig, wenn man sich fragt, wie man einen 3er-Vektor mit einer 4x4-Matrix multiplizieren soll.



  • Blompf schrieb:

    Hi,

    ich habe mal ein kleines Standardproblem aus der 3D-Welt, bei dem ich erstmalig gezwungen bin, es selbst zu implementieren, da ich keine 3D Engine bzw. die dazugehörigen Bibliotheken zur Verfügung habe.

    Ich habe ein paar Vektordaten (bestehend aus x,y, und z Koordinaten) und eine dahinter geschaltete 4x4 Matrix, um diese Daten zu manipulieren. Den Skalierungs-, Translations- und Rotationsanteil der Matrix kann ich bereits problemlos verändern.

    Nun sollen die Sachen aber ausgegeben werden. Deswegen: Wie verwurste ich mir meine Eingangs-x-y-z-Koordinaten so mit der Matrix, dass ich hinterher einsprechend saklierte/verschobene/rotierte Objekte erhalte?

    http://www.dmg.tuwien.ac.at/grohs/lva/skriptum2.pdf
    http://lmb.informatik.uni-freiburg.de/lectures/computer_vision/cvF_4b.pdf



  • Je nach Einsatz sind möglicherweise auch Quaternions interessant. Hier ein Link in dem Vergleiche zum Einsatz von 4x4 Matritzen gezogen werden:
    http://wiki.delphigl.com/index.php/Quaternion#Einsatz_von_Quaternionen_in_der_3D-Grafik

    Soweit ich weiss beinhalten Quaternions allerdings nur Rotation und Translation (also keine Skalierung)



  • Blompf schrieb:

    Nun sollen die Sachen aber ausgegeben werden. Deswegen: Wie verwurste ich mir meine Eingangs-x-y-z-Koordinaten so mit der Matrix, dass ich hinterher einsprechend saklierte/verschobene/rotierte Objekte erhalte?

    Wie schon erwähnt: Matrix-Multiplikation.

    Bei einer 4x4-Matrix, musst du die Koordinaten noch erst homogenisieren und eventuell nach der Operation wieder dehomogenisieren.


Anmelden zum Antworten