Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Vektor Problem (3D) (https://www.delphipraxis.net/9774-vektor-problem-3d.html)

Mirilin 4. Okt 2003 20:00

Re: Vektor Problem (3D)
 
:hi:

Viel spass beim LESEN

Dagon 4. Okt 2003 20:12

Re: Vektor Problem (3D)
 
Hier hast du noch mehr Spass! :mrgreen:

MR321 4. Okt 2003 20:20

Re: Vektor Problem (3D)
 
Ach nö, das wollt ihr mir doch nicht antun.
Ich soll den Stoff eines ganzen Schuljahres und nochmehr mal eben so mir aneignen. :pale:

Ich brauch das Animationssystem jetzt. Sind doch nur 2 Funktionen. (Soweit ich das jetzt verstanden habe)

Delphi-Quellcode:
T3DPunkt = record
  X,Y,Z: Double
end;

...

function getdrehwinkel (P1alt,P1neu: T3DPunkt): T3DPunkt;
begin
  ...
  Result := Die_3_Drehwinkel;
  // Hier verwenden wir den T3DPunkt um darin die 3 Drehwinkel zu speichern
end;

function drehevektor (P2alt,Drehwinkel: T3DPunkt): T3DPunkt;
begin
  ...
  Result := Der_Gedrehte_P; // (P2neu)
end;
Wär echt super, wenn mir jemand die ... in den Funktionen mit Code füllen könnte! :zwinker:

[edit=Daniel B]Delphi-Tags korrigiert. Mfg, Daniel B[/edit]

MR321 5. Okt 2003 15:20

Re: Vektor Problem (3D)
 
Ist das jetzt ein ganz falscher Lösungsansatz, oder warum antwortet mir jetzt keiner? :gruebel:

Jelly 6. Okt 2003 11:01

Re: Vektor Problem (3D)
 
Die Sache mit dem Drehen ist im 3D nicht so trivial. Anschaulich bleibts im 2D, wo du deinen Vektor einfach um einen Winkel drehst, so ähnlich wie die Zeiger einer Uhr. Im 3D hast du aber weitere Drehmöglichkeiten. stell die ne Kugel vor, und einem Vektor vom Mittelpunkt irgendwo bis zum Rand. Jetzt kannst du, im Gegensatz zum 2D Fall, den Vekor in 3 Richtungen drehen. Ich hoff so wirds anschaulicher.

Um die Sache noch etwas zu verkomplizieren. Meist hast du sogar mehrere Möglichkeiten, deine Drehung darzustellen. Bsp: Ein Vektor soll durch Drehung vom Südpol zum Nordpol werden. Jetzt hast du 2 Möglichkeiten, dies zu erzielen. Entweder durch 180° Drehung um die x-Achse oder durch 180° Drehung um die y-Achse. Beidesmal hast du nachher einen Vektor der zum Nordpol zeigt.

Und somit dürfte jetzt auch klarer sein, was die 3 Winkel bedeuten, eben genau jeweils der Drehwinkel um die x-, y- bzw. z-Achse.

Lange Rede kurzer Sinn: ist alles nicht so ohne. :cyclops:

gruß,
Tom

Dagon 6. Okt 2003 11:41

Re: Vektor Problem (3D)
 
Ich an deiner Stelle, würde mich noch mit der analytischen Geometrie auseinandersetzen. Das wird dir auf jeden Fall weiterhelfen.

MR321 6. Okt 2003 14:22

Re: Vektor Problem (3D)
 
Hab ich mir schon gedacht, dass das nicht so einfach ist. Ich hab die Frage inzwischen schon in 3 Foren gestellt - ohne Ergebnis.

Das ist mir inzwischen schon fast egal, wie das Teil das ausrechnet, Hauptsache es funzt.
Ich bräuchte nur irgendeine Formel (bzw. Algorhytmus) die mir den Unterschied zwischen 2 Vektoren in Drehwinkeln ausgibt. Egal wie.
Und da ich von sowas noch gar keine Ahnung habe, bin ich auf eure Hilfe angewiesen.

OregonGhost 6. Okt 2003 16:56

Re: Vektor Problem (3D)
 
Es gibt da noch ein Problem. Wenn du tatsächlich allen Ernstes deine Vektoren über drei Drehwinkel drehst (was durchaus möglich ist), landest du möglicherweise beim so genannten Gimbal Lock Problem. Die Drehungen sind nämlich nicht ganz unabhängig voneinander.
Ein sehr eleganter Weg, Vektoren zu drehen, sind daher Quaternionen, mit denen man das Problem durch Hinzufügen einer vierten Dimension umgeht. Unter diesem Stichwort wirst du sicherlich u.a. bei gamedev.net oder auch im DirectX SDK einige Artikel oder Tutoriale finden.

Ansonsten ist etwas mehr Hintergrundwissen vielleicht angebracht. Im Buch "Direct3D Spieleprogrammierung" gibt es im Anhang eine Einführung in dieses Thema, die du auch ohne Vorwissen verstehen kannst, wie auch in den meisten anderen Büchern zur 3D-Programmierung.

Außerdem findest du auf gamedev.net unter Articles & Resources -> Programming -> Math & Physics zu allen bisher genannten Vorschlägen Tutoriale, darunter 3D-Vektoren, Quaternionen und Matrizen. Schau dir die mal ein wenig an, da sollte was für dein Problem dabei sein. Insbesondere der Artikel "Mathematics of 3D Graphics" sollte für dich interessant sein, zumal sich die meisten Artikel dort halt nicht nur auf den Hintergrund, sondern auch auf die praktische Programmierumsetzung konzentrieren.

MR321 6. Okt 2003 19:48

Re: Vektor Problem (3D)
 
Die 4. Dimension ist mir durchaus bekannt. Aber auf der Seite weis man gar nicht wo man anfangen soll zu lesen.

OK, da mein Problem anscheinend so nicht lösbar ist, erkläre ich mal den Zusammenhang:
Mein Animationssystem arbeitet mit sozusagen mit einem Skelett. Und man animiert Objekte indem man die Knochen im Skelett bewegt.
Nun zum Zusammenhang mit der Aufgabe: Ein Knochen im Skelett ist hier P1. Die Sachen um den Knochen herum, die sich mitbewegen sollen, sind jeweils P2.
Ein Knochen geht immer von einem Gelenk zu einem anderen. Die Herkunft von P1 ist immer im übergeordneten Gelenk, und er geht zum untergeodneten Gelenk. Am unteren Gelenk ist auch P2 "befestigt", also hat dort seinen Ursprung.
Ich hoffe das war verständlich.

Also, wie könnte ich mein Problem sonst noch lösen, dass sich das Objekt mitbewegt, wenn man seine Knochen bewegt?

OregonGhost 7. Okt 2003 16:59

Re: Vektor Problem (3D)
 
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


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:45 Uhr.
Seite 2 von 3     12 3      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz