Kamera Rotation um Bewegliches Object

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
Razorin
Beiträge: 8
Registriert: 31.03.2010, 18:55

Kamera Rotation um Bewegliches Object

Beitrag von Razorin »

Hallo

Ich fang grad erst mir DirectX 9 an und hab da eine kleine Frage
Ich will das man wenn man die rechte Maustaste drück mit man der Kamera sich um ein Object z.b. Würfel bewegen kann mit der Formel:

Code: Alles auswählen

    
xf = cos(w) + zk * sin(w);
zf = zk * cos(w) - sin(w);
//zf neuer genutzer Z wert für die Kamera
//xf neuer genutzer X wert für die Kamera
//w - Winkel der Rotation
//zk - entfernung der Kamera zum Würfel
geht das auch ganz gut aber wenn sich jetz mein Würfel verschiebt funktioniert das ganze nicht mehr;
Ich habe in einen Forum gelesen das bei einer Rotation deren zenrum variabl sein soll die Formel:

Code: Alles auswählen

x' = (x-zx) * cos(winkel) + (y-zy) * sin(winkel) + zx //zx,zy steht für die Rotationstzentrum Koodinaten
y' = (y-zy) * cos(winkel) - (x-zx) * sin(winkel) + zy 
Verwenden sollte.

Ich hoffe ich versteht was ich meine und könnt mir helfen.

Mfg Razorin
Benutzeravatar
Schrompf
Moderator
Beiträge: 4935
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas
Wohnort: Dresden
Kontaktdaten:

Re: Kamera Rotation um Bewegliches Object

Beitrag von Schrompf »

Ich verstehe nicht, was Du meinst. Was möchtest Du erreichen? Dass die Kamera immer auf den Würfel zeigt und um ihn herum rotiert, auch wenn der gegenüber anderen Objekten der Szene verschoben ist? In dem Fall reicht eine simple Addition des Würfelzentrums nach der Bestimmung der rotierenden Kameraposition:

Code: Alles auswählen

x' = x * cos(winkel) + y * sin(winkel) + zx //zx,zy steht für die Rotationstzentrum Koodinaten
y' = y * cos(winkel) - x * sin(winkel) + zy 
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Razorin
Beiträge: 8
Registriert: 31.03.2010, 18:55

Re: Kamera Rotation um Bewegliches Object

Beitrag von Razorin »

ne Simple Addition hilft da allein net
xf = (xk-xo) * cos(w) + (zk-zo) * sin(w)+xo;
zf = (zk-zo) * cos(w) - (xk-xo) * sin(w)+zo;
so funktioniert es zumindest schonmal in 2D aber wenn ich jetzt die Y-Achse mit einbinden will geht garnix mehr...

Nochmal zur erklärung was ich will:

-Ich habe einen Würfel und um den soll sich die Kamera in Halbkugel form bewegen.
-Alle Achsen also X,Y,Z werden gebraucht der winkel errechnet sich ja aus dem Kamera Ziel automatisch.

Hier mal ein kleines Bild wie ich mir das vorstelle:
Bild
Benutzeravatar
Schrompf
Moderator
Beiträge: 4935
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas
Wohnort: Dresden
Kontaktdaten:

Re: Kamera Rotation um Bewegliches Object

Beitrag von Schrompf »

Deine Formel besagt, dass Du um ein Zentrum abseits der Mitte rotieren willst. Wenn das geht, dann prima. Aber sag das doch bitte vorher.

Was Du jetzt willst, ist ein zweiter Winkel. Du brauchst einen Winkel, der 360 Grad auf der XZ-Ebene um das Objekt rotiert, und einen zweiten Winkel, der in die Höhe dreht. Dazu musst Du eine zweite Rotation nach der ersten anwenden. Das Problem ist, dass durch verkettete Rotationen die Formeln ganz schön groß werden. Daher benutzt man dafür dann üblicherweise Matrizen oder Quaternione, um die einzelnen Rotationen darzustellen, zu verketten und Vektoren damit zu transformieren. Dafür muss man ne Vorstellung entwickeln, auch wenn es anfangs sehr mühsam ist, dann sind solche Kamerbasteleien ganz einfach.

Fertigen Code kann ich Dir dafür also grade nicht geben, weil es mir zu mühsam ist, das hier live auszuformeln.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Antworten