Thema: Delphi Vektor Problem (3D)

Einzelnen Beitrag anzeigen

OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#20

Re: Vektor Problem (3D)

  Alt 7. Okt 2003, 17:59
Siehst du, hättest du das mal gleich gesagt. Die Antwort lautet:

Matrixmultiplikation.

Schon mal gehört, oder? Nämlich auf Seite 1 ;c)

Und das geht so. Irgendwo musst du die Bewegung der Knochen ja definieren. Das geht letztendlich über Matrixmultiplikation, das X-Format von DirectX beispielsweise speichert hierzu direkt die Matrizen. Und jetzt kommt der Witz: Wenn du z.B. deine Torso-Matrix multiplizierst mit der Oberarm-Matrix, die du mit der Unterarmmatrix multiplizierst etc. (Handmatrix, Fingermatrix), musst du nämlich nur relative Matrizen speichern und erhältst jeweils die "End-"Matrix, die du direkt auf den Vertices anwenden kannst. Zu diesem Konzept gehört auch der Matrix-Stack, den es z.B. für DirectX als ID3DXMatrixStack gibt.
Du definierst die Bewegung des Knochen als Matrix. Diese speicherst du für den Knochen, und dann kannst du sie sowohl auf den zu dem Knochen gehörigen Vertices, als auch auf allen in der Hierarchie untergeordneten Knochen anwenden.

Gewöhnlich führst du die letztendliche Multiplikation der Vektoren mit den Matrizen jedoch nicht selbst durch, sondern lässt das die Grafikkarte machen, indem du die Matrix als Transformationsmatrix (in diesem Fall als Welttransformationsmatrix) der Karte übermittelst. Du kannst es natürlich trotzdem von Hand machen.

Aber mal ehrlich, du willst also ein Knochensystem basteln, ohne von Vektoren eine Ahnung zu haben?
Wie dem auch sei, die Stichworte Matrix, Matrixmultiplikation, Matrixstack sollten eigentlich als Suchgrundlage reichen. Auch auf gamedev.net oder gamasutra.com gibt es zu diesen Themen mehrere Artikel, wenn ich nicht irre sogar exakt zu deinem Problem (wie baue ich ein Knochensystem).

Ach ja, um es nicht zu vergessen: Wenn du Winkel zwischen Vektoren benötigst, ist generell das Punktprodukt (Dot Product) oder Bei Google suchenSkalarprodukt die richtige Wahl. Ich hab' auch noch einen Artikel gefunden, der das ganze etwas erläutert: http://www.jtl-software.de/3d_grund.html
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat