Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi First Person - In 3 Dimensionen bewegen (https://www.delphipraxis.net/74209-first-person-3-dimensionen-bewegen.html)

ISAS 30. Jul 2006 15:55


First Person - In 3 Dimensionen bewegen
 
Hallo!

Ich arbeite mich gerade in OpenGL ein. Geht auch recht gut, aber stehe nun vor einem Problem, dass eher allgemein ist. Will mich wie bei einem 3D Programm frei in der Welt bewegen können. Wie ein Raumschiff: Rauf, runter, links, rechts, drehenrauf, drehenrunter, drehenlinks, drehenrechts. Sprich vogelfrei. Ich glaube, ihr wisst, was ich meine ;)

Auf 2 Dimensionen hab ich es auch schon geschafft mich zu bewegen, aber irgendwie happerts an der 3...

Ich habe 2 Winkel (eine um die z-Achse und die andre um die y-Achse) und eine Weglänge (oder auch radius). Jetzt möchte ich, wenn ich mich in einem bestimmen Winkel (sagen wir mal 45° von x weg und 45° hinauf) den Punkt errechnen, der vom 0Punkt genau diese Winkel entfernt ist mit einer bestimmten Weglänge.

Kurz gesagt, ich schaue gerade rechts rauf und will mit betätigen einer Taste auch dorthin.
Ich brauch also die Formel(n), die man benötigt, um diesen Punkt zu berrechnen.

Danke

PS: Falls ich mich schlecht ausgedrückt habe und ihr nicht wisst, was ich will, dann versuche ich es irgendwie anders nochmal. Aber Stichwort vogelfrei bzw Kammera wie in einem 3D Bearbeitungs-Programm müsste eigentlich alles erklären!

Nikolas 30. Jul 2006 16:11

Re: First Person - In 3 Dimensionen bewegen
 
In Kugelkoordinaten wird sowas nicht allzu schön. Ich würde daher vorschlagen in kartesische Koordinaten umzusteigen, die Vektoraddition auszufühen und dann wieder in KK zurückzugehen.

ISAS 30. Jul 2006 17:05

Re: First Person - In 3 Dimensionen bewegen
 
hmm, was du mit Kugelkoordinaten meinst, weis ich jetzt nicht so recht.
ich hab versucht mit x² + y² + z² = r² zu rechnen, aber ich komm einfach auf keine Formel... :(

Khabarakh 30. Jul 2006 17:18

Re: First Person - In 3 Dimensionen bewegen
 
Im Wikipedia-Artikel über Kugelkoordinaten findest du die Formel zur Umrechnung ins karthesische Koordinatensystem.

Nikolas 30. Jul 2006 17:34

Re: First Person - In 3 Dimensionen bewegen
 
Schreib doch mal genau, in welchem System du deine Koordinaten hast und wie du rechnen wolltest, bzw. wie deine Winkel definiert sind.

ISAS 30. Jul 2006 17:47

Re: First Person - In 3 Dimensionen bewegen
 
Rotate.y = 80.0;
Rotate.z = 10.0;

Jetzt habe ich einen Kreis (r = 1 ( <- "eins")) mit der X und Z achse Angenommen und mit dem Winkel dann beide Punkte berechnet

P.x = r * cos(Rotate.z);
P.z = r * sin(Rotate.z);

k, das funktioniert bei 2D. Wenn ich nun versuche irgendwie die y-Koordinate hinzuzufügen, dann geht das irgendwie nicht. Da x und z ja auch von y abhängen. P.y = r * sin(Rotate.y); wurde mir dann y ergeben, aber dieser Wert hat nichts mit x und z zu tun. Sprich ich schaff es immer nur 2 Werte zu errechnen und den 3ten leider nicht.

PS: Aber es muss ja nicht ein Punkt sein, es reicht schon ein Vektor, der vom 0-Punkt aus durch diesen Punkt führt, weil ich diesen einfach auf 1 zurückstutzen kann bzw. auf die gewünschte länge...

Khabarakh 30. Jul 2006 17:51

Re: First Person - In 3 Dimensionen bewegen
 
Und was bitte gefällt dir nun nicht an jenem Wikipedia-Eintrag?

Nikolas 30. Jul 2006 17:56

Re: First Person - In 3 Dimensionen bewegen
 
Wie sind deine Winkel definiert? Wertebereich, zwischen Welchen Geraden/Ebenen...

Was ist jetzt eigentlich dein Problem?
Stehst du im Origo deines Kugelkoordinatensystems und hast einen Vektor in Kugelkoordinaten und willst den in kartesischen Koordinaten darstellen, oder stehst du irgendwo in deinem KKSystem und hast einen weiteren KKSystem-Vektor und willst diese addieren und das Ergebniss dann in kartesischen/Kugel-Koordinaten?

ISAS 30. Jul 2006 18:25

Re: First Person - In 3 Dimensionen bewegen
 
... arbeite mich gerade in die Kugelkoordinaten ein...

danke mal für den Vorschlag. Das scheint es zu sein, aber ich muss das erstmal richtig verstehen.

//Edit:: habe die Winkel auf der xz-Achse und xy achse.

hmm, Also eigentlich hab ich beide Winkel, die ich brauche... richtig?

Nehmen wir an:
Winkel auf der xy-Achse = a = 45°
Winkel auf der xz-Achse = b = 45°
Radius r = 1 und somit nich zu beachten.

x = sin(a) * sin(b) = 0.5 //falsch. Müsste 0.577 sein

Welcher Winkel passt nicht?


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:37 Uhr.

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