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

07.02.2010, 12:52

Kamera mit Sprite mitbewegen

So ich mal wieder.
Ich hab Lade in meinem Quellcode ein Model und bewege es mit der Translationsmatrix

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
float TranslationX   = 0.0f; 
float TranslationY   = 0.0f; 
float TranslationZ   = 0.0f; 
...
D3DXMatrixTranslation(&TranslationMatrix, TranslationX, TranslationY, TranslationZ);
...
if(GetAsyncKeyState(VK_RIGHT))
        TranslationX += (stime - (stime-0.009f));
    if(GetAsyncKeyState(VK_LEFT))
        TranslationX -= (stime - (stime-0.009f));
    if(GetAsyncKeyState(VK_UP))
        TranslationY += (stime - (stime-0.009f));
    if(GetAsyncKeyState(VK_DOWN))
        TranslationY -= (stime - (stime-0.009f));


So das klappt auch ganz gut. Aber ich weiß nicht wie ich die Kamera mit dem Sprite mitbewegen soll.
Hier die Kamera

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
D3DXVECTOR3             g_vCameraPosition = D3DXVECTOR3(0.0f, -14.0f, -25.0f);              // Die Kameraposition

float                   g_fCameraAngle = 0.0f;
...
D3DXMatrixLookAtLH(&ViewMatrix, 
                       &g_vCameraPosition,
                       &D3DXVECTOR3(sinf(g_fCameraAngle),
                                        0.0f,
                                        cosf(g_fCameraAngle)),
                       &D3DXVECTOR3(0.0f, 1.0f, 0.0f)); 

    D3DXMatrixPerspectiveFovLH(&ProjectionMatrix, D3DXToRadian(60.f),1.f,1.f,100.f); 


Ich habs schon so probiert:

C-/C++-Quelltext

1
2
if(GetAsyncKeyState(VK_UP))
        g_vCameraPosition = TranslationY;


aber so geht das nicht. Ich will einfach nur das die Kamera dem Spieler folgt.
Ich weiß nicht mehr weite.

mfg Fabian
Metal ist keine Musik sondern eine Religion.

2

07.02.2010, 13:04

C-/C++-Quelltext

1
g_vCameraPosition = TranslationY; // D3DXVECTOR3 = float

... :roll:

Setz doch einfach die Kameraposition in jedem Frame neu, aber richtig, nicht so wie in dem Code :)

3

07.02.2010, 13:08

Brauchst doch eigentlich nur g_vCameraPosition relativ zu deinem Sprite bewegen. Die Ausgangsposition ist ja bekannt:

C-/C++-Quelltext

1
D3DXVECTOR3 g_vCameraPosition = D3DXVECTOR3(0.0f, -14.0f, -25.0f); 


Wenn du nun den Sprite bewegst, aktualisierst du die Kamera entsprechend:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
if(GetAsyncKeyState(VK_RIGHT))
        TranslationX += (stime - (stime-0.009f));
    if(GetAsyncKeyState(VK_LEFT))
        TranslationX -= (stime - (stime-0.009f));
    if(GetAsyncKeyState(VK_UP))
        TranslationY += (stime - (stime-0.009f));
    if(GetAsyncKeyState(VK_DOWN))
        TranslationY -= (stime - (stime-0.009f));

g_vCameraPosition.x = AusgangspositionX + TranslationX;
g_vCameraPosition.y = AusgangspositionY + TranslationY;

4

07.02.2010, 13:20

Die Kamera "fährt" aber trotzdem noch nicht mit. Das Sprite geht irgendwann aus dem Sichtfeld der Kamera
Metal ist keine Musik sondern eine Religion.

5

07.02.2010, 13:22

Hast du die ViewMatrix aktualisiert/transformiert?

6

07.02.2010, 13:45

Nein.Wie muss ich das machen??
Metal ist keine Musik sondern eine Religion.

7

07.02.2010, 15:02

C-/C++-Quelltext

1
2
3
4
5
6
7
8
D3DXMatrixLookAtLH(&ViewMatrix,
                       &g_vCameraPosition,
                       &D3DXVECTOR3(sinf(g_fCameraAngle),
                                        0.0f,
                                        cosf(g_fCameraAngle)),
                       &D3DXVECTOR3(0.0f, 1.0f, 0.0f)); 

Device->SetTransform(D3DTS_VIEW, &ViewMatrix);

8

07.02.2010, 15:04

Doch des ist schon im Code drin
Metal ist keine Musik sondern eine Religion.

9

07.02.2010, 15:12

In jedem Frame?
Nachdem du die Kameraposition neu berechnet hast?

10

07.02.2010, 15:14

Ganz oben in der RenderFunktion. Und die wird in der Msgloop aufgerufen
Metal ist keine Musik sondern eine Religion.

Werbeanzeige