Eine Kamera in Blickrichtung bewegen

  • VB.NET
  • .NET (FX) 1.0–2.0

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von Vultrax.

    Eine Kamera in Blickrichtung bewegen

    Was möchte ich?

    In einer Techdemo möchte ich durch mein Programm die Kamera in Blickrichtung geradeaus (möglicherweise in der Blickrichtung auch Rechts/Links/Hoch/Runter) bewegen.

    Was habe ich?

    CameraPositionX (Beispielwert: 1304,04688)
    CameraPositionY (Beispielwert: 7848,60938)
    CameraPositionZ (Beispielwert: -2224,72168)

    CameraYaw (Beispielwert: -2,05118)
    CameraPitch (Beispielwert: -50,86047)
    CameraRoll (Beispielwert: 3,18844) [Roll wird nicht benötigt, oder?]


    Das Problem ...

    Nachdem ich auf eigene Faust versucht habe, mir die Rechnung (auch wie es im Koordinaten-System aussieht) vorzustellen und umzusetzen, kam ich schließlich zu dem Schluss, dass ich's alleine nicht gebacken bekomme.
    Ich hoffe doch, dass mir einer von Euch die Rechnung Schritt-Für-Schritt (Idiotensicher) erklären kann, damit auch ich's endlich mal verstehe und problemlos umsetzen kann.
    "Denken ist die schwerste Arbeit, die es gibt. Das ist wahrscheinlich auch der Grund, warum sich so wenig Leute damit beschäftigen." - Henry Ford

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Vultrax“ ()

    @Vultrax Das sind Eulerwinkel, gugst Du de.wikipedia.org/wiki/Eulersche_Winkel
    Die kamen hier im Forum auch schon mal dran: Quaternion / Eulerwinkel Klasse
    Da musst Du einfach mal ein Gefühl für entwickeln, danach können wir die Berechnung diskutieren.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @RodFromGermany
    Danke, dann weiß ich nun endlich die Bezeichnung dafür.
    Geht es in dem Thread aber nicht nur um die Drehung des Objekts? Die Koordinaten sowie Yaw, Pitch und Roll kann ich ja modifizieren.
    "Denken ist die schwerste Arbeit, die es gibt. Das ist wahrscheinlich auch der Grund, warum sich so wenig Leute damit beschäftigen." - Henry Ford
    @Gonger96
    Die Achsen der Kamera verändert sich auf der Seite mit dem Blickwinkel, was bei meiner Kamera nicht der Fall ist.
    Wenn ich also die Y-Achse modifiziere, ist es egal wo die Kamera hinschaut, sie wird immer in die selbe Richtung hoch/runter gehen (selbes gilt für die anderen Achsen).

    (Die Achsen der Kamera bleiben auch mit diesen Blickwinkeln wie auf dem gezeigten Objekt)


    (wie in diesem GIF, was sich auch in dem anderen Thread finden lässt)

    "Denken ist die schwerste Arbeit, die es gibt. Das ist wahrscheinlich auch der Grund, warum sich so wenig Leute damit beschäftigen." - Henry Ford

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Vultrax“ ()

    Versteh ich nicht. Was hast du denn, eine CameraToWorld Matrix oder Quaternions + Verschiebungsvektor etc? Die Achsen bleiben immer konstant. Auf dem Bildchen sind die lokalen Achsen der Kamera. Also was heißt Blickrichtung? Die Blickrichtung ist immer Z+ der Kamera. Die Kamera steht also immer in Blickrichtung. Oder möchtest du die Kamera entlang der Blickrichtung bewegen (verschieben)?

    Vultrax schrieb:

    Wenn ich also die Y-Achse modifiziere, ist es egal wo die Kamera hinschaut, sie wird immer in die selbe Richtung hoch/runter gehen
    Hier ist die reihenfolge der Operation { Translation }, { Rotation } wichtig.
    Ergebnis ist, dass die Translation im Weltsystem oder im Kamerasystem stattfindet.
    Da musst Du mal etwas mit rumspielen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @Gonger96
    Schwierig zu erklären ... Die Achsen der Kamera bleiben wie auf dem zweiten Bild bei "World Coordinate System", egal wohin die Kamera gerichtet ist (sie verändern sich also nicht wie bei "Local Coordinate System").
    Ich möchte die Kamera nun Vorwärts/Rückwärts/Hoch/Runter/Links/Rechts in der Blickrichtung bewegen. Die Blickrichtung lege ich mit dem Pitch und Yaw fest.





    @RodFromGermany
    ​Hier ist die reihenfolge der Operation { Translation }, { Rotation } wichtig.Ergebnis ist, dass die Translation im Weltsystem oder im Kamerasystem stattfindet.
    Da musst Du mal etwas mit rumspielen.

    Kannst Du mir das etwas genauer erläutern?
    "Denken ist die schwerste Arbeit, die es gibt. Das ist wahrscheinlich auch der Grund, warum sich so wenig Leute damit beschäftigen." - Henry Ford

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Vultrax“ ()

    Vultrax schrieb:

    genauer erläutern?
    Mach Dir ne Form mit 6 Slidern, 3 x Trans, 3 x Rot, stelle das Resultat sinnvoll dar und fahre mit den Slidern hin und her.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!