Objekt in 3D-Raum in eine Richtung bewegen



  • Guten Morgen!

    Ich habe folgendes Problem:

    In einem 3D-Raum ruht an der Stelle 0,0,0 ein Punkt. Jetzt möchte ich sagen können:

    punkt.Speed(30);

    und dann soll sich der Punkt in x-Richtung bewegen. Wenden tut er dann wenn man den z-wert ändert, oder rauf und runterfliegen wenn man den y-wert ändert. Das ich jetzt einfach sagen könnte x+30 ist mir klar, aber irgendwie muss das doch mit Vektoren, welche die Richtung angeben, gehen. Irgendwo ist bei mir da noch der geistige Knoten, wie kann man dem Punkt seine Richtung mitteilen in die er "blicken" soll bzw. wo er hinfliegt wenn man Gas gibt?

    btw.: Moin Patrick 😃



  • wenn du die orientierung eines objektes ändern willst (also z.b. wo dein model hinsieht) musst du alle vertizes (punkte) rotieren. OpenGL und DirectDraw bieten dafür funktionen (ogl: rotate), ansonsten musst du das mit rotationsmatrixen machen. das verschieben geht eigentlich recht leicht mit vektorgeometrie: du brauchst einen richtungsvektor (wo es hingehen soll) und eine einheit, wie weit es gehen soll (hier z.b. 30). dann musst du pro takt (irgendwie musst du ja alle bewegungen synchronisieren und die zeit ins spiel bringen) einfach 30 * normierter richtungsvektor auf deine aktuelle position draufaddieren. (opengl: translate)
    wenn die bewegung flüssig sein soll musst du das intervall indem die bewegung upgedated wird recht klein machen.



  • \vec{p}=\begin{pmatrix}x \\ y \\ z \end{pmatrix} + \begin{pmatrix}30 \\ 0 \\ 0 \end{pmatrix

    du musst ja nur einen vektor erzeugen, der in die Richtung zeigt, in die beschleunigt werden soll und als Länge die geschwindigkeit hat, um die der punkt verschoben werden soll.

    Folgendes Buch dürfte dich interessieren
    Computergrafik | ISBN: 3826609085

    Ansonsten hilft bei Schwierigkeiten immer ein Blick in die Wikipedia.


Anmelden zum Antworten