[C++ / 3D] LocalMatrix u. WorldMatrix + Tranformationsmatrix



  • Hallöchen zusammen,

    ich habe eigentlich mehr zwei Verständnisfragen, bzw. eine konkrete auf Mathematik bezogen.

    Zu der ersten:
    Was versteht man in der 3D-Programmierung unter der "Local Matrix", bzw. "World Matrix" ?

    Und zweitens:
    Wie wende ich eine Transformationsmatrix auf ein Objekt im 3D-Raum an ?

    Hierzu ein konkretes Beispiel.

    Gegeben habe ich eine Matrix die wie folgt aussieht:

    -0,90   0   0,19   1,32
        0   1      0      0
    -0,19   0  -0,90     -3
     0      0   0         1
    

    Diese soll ich auf mein Objekt im 3D-Raum anwenden, hatte bisher jedoch noch nicht wirklich etwas mit Transformationsmatrizen zu tun.

    Gesagt habe ich bekommen, dass diese Matrix die Translation wie auch die Rotation enthält.

    Kann mir da jemand weiterhelfen ?

    Grüße und vielen Dank,
    SKiD.

    //EDIT ON
    Also ich habe jetzt ersteinmal etwas rumprobiet und festgestellt, dass die Transformationsmatrix wie folgt aufgebaut sein muss:

    R11 R12 R13 T11
    R21 R22 R23 T12
    R31 R32 R33 T13
      0   0   0   1
    
    R = Rotation
    T = Translation
    

    So würde das Objekt, wenn ich die Sache mit der lokalen Matrix des Objektes multipliziere, richtig dargstellt werden.

    Aber was genau ist die lokale Matrix ?
    Wenn die lokale Matrix des Objektes so aussieht ...

    1   0   0   0
      0   1   0   0
      0   0   1   0
      0   0   0   1
    

    ... heißt dass dann dass der Mittelpunkt des Objektes an der Position [0, 0, 0] im Raum liegt, das Objekt die volle Größe besitzt und nicht rotiert ist ?

    Das wäre dann eigentlich ganz simpel _
    Dann würde oben die Transformationsmatrix eine Rotation um die Y-Achse für 168,72° angeben ...
    //EDIT OFF



  • Was versteht man in der 3D-Programmierung unter der "Local Matrix", bzw. "World Matrix" ?

    Die Begriffe leiten sich aus der Geometriepipeline ab, die z.B. von GL oder DirectX verwendet wird. Die übergebenen Geometriedaten werden in Form von Koordinaten angegeben, welche sich relativ zu einer Basis, die das Objektkoordinatensystem beschreibt, befinden. Im Verlauf der Pipeline werden die Koordinaten dann in diverse andere Koordinatensysteme transformiert: Objekt Space -> (World Space) -> Camera Space -> Clip Space -> Window Space. Der Worldspace steht in Klammern, weil die Transformation Object Space zu Camera Space meistens in einem Schritt stattfindet.
    Um zwischen den Räumen transformieren zu können (d.h. Koordinaten relativ zum einen Koordinatensystem entsprechend relativ zu einem anderen ausdrücken zu können) werden Übergangsmatrizen (Transformationsmatrizen) verwendet die häufig mit Modelview- (für Object Space -> Camera Space), Projection- (Camera Space -> Homogenous Clip Space), Viewportmatrix (Homogenous Clip Space -> Window Space) bezeichnet werden.

    Wie wende ich eine Transformationsmatrix auf ein Objekt im 3D-Raum an ?

    Wenn die Transformationsmatrix eine Übergangsmatrix von der Basis A zur Basis B ist und die Koordinaten relativ zur Basis A angegeben wurden, dann kannst du die Koordinaten per Matrixmultiplikation in den B-Raum verfrachten.
    Entsprechend multiplizierst du einfach jeden Vertex deines Objekts mit der Transformationsmatrix.


Log in to reply