Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

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: 774

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.

idontknow

unregistriert

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.

idontknow

unregistriert

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!

idontknow

unregistriert

10

05.09.2010, 15:12

oO?

Code =?

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

Werbeanzeige