AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Vektor Problem (3D)

Offene Frage von "MR321"
Ein Thema von MR321 · begonnen am 3. Okt 2003 · letzter Beitrag vom 12. Okt 2003
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von Mirilin
Mirilin

Registriert seit: 21. Dez 2002
Ort: Lenzburg
861 Beiträge
 
Delphi 6 Professional
 
#11

Re: Vektor Problem (3D)

  Alt 4. Okt 2003, 20:00


Viel spass beim LESEN
Tobias
Die Physik ist für die Physiker eigentlich viel zu schwer.
  Mit Zitat antworten Zitat
Dagon

Registriert seit: 13. Jul 2003
505 Beiträge
 
Delphi 7 Professional
 
#12

Re: Vektor Problem (3D)

  Alt 4. Okt 2003, 20:12
Hier hast du noch mehr Spass!
  Mit Zitat antworten Zitat
MR321

Registriert seit: 18. Aug 2003
38 Beiträge
 
#13

Re: Vektor Problem (3D)

  Alt 4. Okt 2003, 20:20
Ach nö, das wollt ihr mir doch nicht antun.
Ich soll den Stoff eines ganzen Schuljahres und nochmehr mal eben so mir aneignen.

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!

[edit=Daniel B]Delphi-Tags korrigiert. Mfg, Daniel B[/edit]
Computers are like air conditioners, they stop working immediately, if you open windows.
  Mit Zitat antworten Zitat
MR321

Registriert seit: 18. Aug 2003
38 Beiträge
 
#14

Re: Vektor Problem (3D)

  Alt 5. Okt 2003, 15:20
Ist das jetzt ein ganz falscher Lösungsansatz, oder warum antwortet mir jetzt keiner?
Computers are like air conditioners, they stop working immediately, if you open windows.
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#15

Re: Vektor Problem (3D)

  Alt 6. Okt 2003, 11:01
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.

gruß,
Tom
  Mit Zitat antworten Zitat
Dagon

Registriert seit: 13. Jul 2003
505 Beiträge
 
Delphi 7 Professional
 
#16

Re: Vektor Problem (3D)

  Alt 6. Okt 2003, 11:41
Ich an deiner Stelle, würde mich noch mit der analytischen Geometrie auseinandersetzen. Das wird dir auf jeden Fall weiterhelfen.
  Mit Zitat antworten Zitat
MR321

Registriert seit: 18. Aug 2003
38 Beiträge
 
#17

Re: Vektor Problem (3D)

  Alt 6. Okt 2003, 14:22
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.
Computers are like air conditioners, they stop working immediately, if you open windows.
  Mit Zitat antworten Zitat
OregonGhost

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

Re: Vektor Problem (3D)

  Alt 6. Okt 2003, 16:56
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.
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
MR321

Registriert seit: 18. Aug 2003
38 Beiträge
 
#19

Re: Vektor Problem (3D)

  Alt 6. Okt 2003, 19:48
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?
Computers are like air conditioners, they stop working immediately, if you open windows.
  Mit Zitat antworten Zitat
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, 16: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
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:19 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz