Vektoren und Matritzen
Übersicht

KlaasBetreff: Vektoren und Matritzen |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi,
um mir selber ein besseres Verständniss der Mathematik hinter dem ganzem 3D Krams zu machen habe ich angefangen mir eine 3D-Engine "per Hand" zu schreiben. Nun habe ich auch alles wunderbar hinbekommen, Rotation, Translation und Skalierung über eine gesamte Matritze, Projektion etc. Nun woltte ich ein Hierachisches Node-System aufbauen ganz so wie es BB3D hat. Nun zur Frage: Ich weiß das man um die Matritze des Objektes zu erhalten diese irgendwie mit der des Parent Objectes multiplizieren muß. Nur leider kommt dort bei mir nur Schrott raus. Kann mir hier jemand zu diesem Thema etwas sagen ? P.S.: Bitte keine Antworten a la "warum willst du das nachcoden? sowas gibt es schon!" |
||
![]() |
Xaron |
![]() Antworten mit Zitat ![]() |
---|---|---|
Einzahl: Die Matrix
Mehrzahl: Die Matrizen ![]() Grundsätzlich hast Du ja wahrscheinlich 2 Koordinatensysteme. Dein globales, wo alle Objekte drin sind und jeweils die lokalen für die einzelnen Objekte. Du musst die Objekte halt irgendwie miteinander verknüpfen, quasi einen "Objektbaum" aufbauen. Wenn Du dann einen Knoten änderst, musst Du durch alle Childs durch und diese auch entsprechend ändern. Dazu nimmst Du das Koordinatensystem des Parent als Zentrum. Du brauchst also eine Transformation für alle Childs in dieses neue lokale System und führst diese Transformation für alle Childs durch. Zuletzt transformierst Du den ganzen Knoten in Dein globales System - damit müsste es dann eigentlich passen. ![]() Sorry, wenn das etwas unverständlich ist, bin noch etwas müde... ![]() Gruß - Xaron |
||
Cerberus X - Monkey X Reloaded! |
Klaas |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Stimmt schon, so kann man das auch machen. nur leider ist das nicht sehr performant da man alle Vertices mehrfach transformieren muß.
Schneller ist es da die Matrizen miteinander zu multiplizieren, nur weiß ich leider nicht wie, da diese irgendwie invertiert werden müßen vorher. |
||
Darren |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Olli fragen ![]() |
||
MFG Darren |
Steffen |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Du hast von jedem Objekt eine lokale Transformationsmatrix. Diese Matrix wird nur erneuert, wenn sich an diesem Objekt was ändert. Was das Elternobjekt macht ist egal, weil diese Transformation sowieso noch draufgerechnet wird.
Im Renderer wird der Objektbaum Traversiert Du fängst mit der Einheitsmatrix an. Diese wird an alle "globalen" Objekte weitergegeben(als kopie, sonst geht es nicht). Diese multiplizieren jeweils ihre Transformationsmatrix von rechts dran und geben sie an ihre Kinder weiter, die das Selbe tun. Wenn du diese Matrix auf die Punkte des Objekts anwendest, bekommst du die Weldkoordinaten. Pseudocode: Code: [AUSKLAPPEN] function renderObject(Object, parentMatrix) ;parentMatrix: Transformationsmatrix des Elternobjektes ;transformationMatrix: lokale Transformationsmatrix ;globalTransformationMatrix: Matrix zur Berechnung der Weltkoordinaten globalTransformationMatrix = parentMatrix * parentMatrix ;Matrix auf alle Punkte Anwenden ... ;Kinder berechnen for i=1 to anzahlKinder renderObject(Kind[i], globalTransformationMatrix) next |
||
>PC: Pentium III 750MHz, ATI Rage 128 mit 32Mb, Windows Me, Blitz3D 1.87
>Laptop: Pentium M 1,4GHz, 512 Mb DDR, ATI Mobility Radeon 9000 mit 64Mb DDR, Windows XP Home, Blitz3D 1.87 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group