Du bist nicht angemeldet.

Werbeanzeige

1

04.09.2010, 22:46

Kamera um die eigene Achse drehen

Hi,
Ich sitze jetzt schon länger an dem Problem wie ich die Kamera um die eigene Achse drehen kann, also praktisch rotieren lassen. Mit Matrizen geht es nicht da die Kamera ja kein 3Dimensionales Objekt ist.

mfg Fabian
Metal ist keine Musik sondern eine Religion.

Beiträge: 775

Beruf: Student

  • Private Nachricht senden

2

04.09.2010, 23:00

Dazu musst du die Kameramatrix entsprechend anpassen. Möchtest du die Kamera um ihre lokale y-Achse rotieren, veränderst du den Punkt auf den du schaust entsprechend (soll heißen du lässt diesen Punkt um den Ort deiner Kamera rotieren). Möchtest du um die Z oder Y-Achse rotieren drehst du den Hochvektor entsprechend.
-- So jedenfalls wenn du deine Kameramatrix aus diesen Angaben erstellst. --

Prinzipiell ist die Kamera ja eine Achsenmatrix kombiniert mit einer Translationsmatrix. Folglich kannst du die Vektorzeilen/spalten (je nachdem wie deine Matrizen orientiert sind ;)) der Matrix beliebig anpassen.

Eine Rotationsmatrix wie bei normalen Objekten anzuwenden wäre wie du richtig erkannt hast falsch - den dann würden ja einzelne Objekte so transformiert werden: Welt -> Kamera -> Rotation -> Projektion
Ist also ziemlicher Quark dann wenn man nicht aufpasst.

3

04.09.2010, 23:00

die kamera kannst du nicht drehen, weil es die eigentlich garnicht wirklich gibt. Die Kamera ist nur eine Matrix, die auf alle Objekte (oder Vertices) angewendet wird. das heißst, du musst quasi alle objekte so transformieren, dass es so aussieht, als hätte sich die kamera gedreht

EDIT: da war wohl jemand schneller als ich, aber das meinte ich auch so :)

4

05.09.2010, 00:15

Das heißt ich muss nicht die Kamera drehen sondern einfach nur die objekte?
Metal ist keine Musik sondern eine Religion.

5

05.09.2010, 00:19

.. das macht die Kamera Matrix für dich.....

Nein du must eigentlich nur den Punkt ändern auf den du schaust, sprich der Parameter vAt. (Zumindest in dieser DX Funktion die ne Kamera Matrix zurückgibt)

6

05.09.2010, 00:25

Die Kamera bewegt sich aber dann ganz merkwürdig wenn ich den Parameter vAt änder. Z.B einfach nur nach unten langsamer werdend!
Metal ist keine Musik sondern eine Religion.

7

05.09.2010, 01:13

oO?

Code =?

Wenn du vAt korrekt önderst sollte sich die Kamera richtig bewegen! (Denke ich)

8

05.09.2010, 12:42

das ist der Code:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
D3DXMATRIX ViewMatrix; 
    D3DXMATRIX ProjectionMatrix; 

    cd3d.GetDevice()->SetRenderState(D3DRS_LIGHTING,TRUE);
    cd3d.GetDevice()->SetRenderState(D3DRS_CULLMODE,D3DCULL_NONE);
    cd3d.GetDevice()->SetRenderState(D3DRS_DITHERENABLE,TRUE);
    cd3d.GetDevice()->SetRenderState(D3DRS_ZWRITEENABLE,TRUE);


    D3DXMatrixLookAtLH(&ViewMatrix, 
                       &g_vCameraPos,
                       &pAt,
                       &D3DXVECTOR3(0.0f, 1.0f, 0.0f)); 
    
    D3DXMatrixPerspectiveFovLH(&ProjectionMatrix, 
                               D3DX_PI/4, 
                               static_cast<float>(cwind.GetWidth()) / static_cast<float>(cwind.Getheight()), 
                               1.0f, 
                               1000.0f ); 

    pAt.y += 10.0f*stime;

    cd3d.GetDevice()->SetTransform(D3DTS_VIEW, &ViewMatrix); 
    cd3d.GetDevice()->SetTransform(D3DTS_PROJECTION, &ProjectionMatrix); 

    cd3d.BeginRendering(0x00ffff00);

    rendervil.RenderBuildings(cd3d.GetDevice());

    cd3d.EndRendering();

    return 0;

Das objekt bewegt sich langsamer werdend nach unten
Metal ist keine Musik sondern eine Religion.

9

05.09.2010, 15:01

C-/C++-Quelltext

1
pAt.y += 10.0f*stime;

Wie z.B. Wümpftlbrümpftl schon schrieb sollst du den Punkt auch drehen, nicht nur irgendwie hoch- oder runterschieben!

10

05.09.2010, 15:12

oO?

Code =?

Wenn du vAt korrekt änderst sollte sich die Kamera richtig bewegen! (Denke ich)

Werbeanzeige