Vektoren und Matritzen

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Klaas

Betreff: Vektoren und Matritzen

BeitragDo, Mai 19, 2005 9:47
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Mai 19, 2005 10:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Einzahl: Die Matrix
Mehrzahl: Die Matrizen Wink

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. Wink

Sorry, wenn das etwas unverständlich ist, bin noch etwas müde... Wink

Gruß - Xaron
Cerberus X - Monkey X Reloaded!
 

Klaas

BeitragDo, Mai 19, 2005 11:27
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Mai 19, 2005 12:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Olli fragen Wink
MFG Darren
 

Steffen

BeitragDo, Mai 19, 2005 20:05
Antworten mit Zitat
Benutzer-Profile anzeigen
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

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group