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

26.08.2009, 14:36

[DirectX] Kamera bewegt sich komisch...

Hallo,

ich habe eine Kamera und versuche sie durch DirectInput zu steuern, aber irgendwie kommt entweder gar kein Bild oder die Kamera bewegt sich in die Z-Achse ohne das ich was mache. Hier mal mein Code für die Kamera:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
    D3DXMATRIX matView;

    Bewegen(0.05f, matView);
    D3DXMATRIX matProjection;

    D3DXMatrixPerspectiveFovLH(&matProjection,
                               D3DXToRadian(45),  
                               (FLOAT)fnk_Width(0, 'N') / (FLOAT)fnk_Height(0, 'n'),
                               0.0f, 
                               0.0f);

    d3ddev->SetTransform(D3DTS_PROJECTION, &matProjection);


und hier der Code für die Bewegungsfunktion:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void Bewegen(float geschwindigkeit, D3DXMATRIX mView)
{
    if(keystate[DIK_A]) {
            D3DXMatrixLookAtLH(&mView, &D3DXVECTOR3 (-geschwindigkeit, 0.0f, 0.0f), &D3DXVECTOR3 (0.0f, 0.0f, 0.0f), &D3DXVECTOR3 (0.0f, 1.0f, 0.0f)); 
    d3ddev->SetTransform(D3DTS_VIEW, &mView); 
    } else if(keystate[DIK_W]) {
            D3DXMatrixTranslation(&mView, 0.0f, 0.0f, geschwindigkeit); // dachte es liegt an der D3DXMatrixLookAtLH Funktion

    d3ddev->SetTransform(D3DTS_VIEW, &mView); 
    } else if(keystate[DIK_S]) {
            D3DXMatrixLookAtLH(&mView, &D3DXVECTOR3 (0.0f, 0.0f, -geschwindigkeit), &D3DXVECTOR3 (0.0f, 0.0f, 0.0f), &D3DXVECTOR3 (0.0f, 1.0f, 0.0f)); 
    d3ddev->SetTransform(D3DTS_VIEW, &mView); 
    } else if(keystate[DIK_D]) {
            D3DXMatrixLookAtLH(&mView, &D3DXVECTOR3 (geschwindigkeit, 0.0f, 0.0f), &D3DXVECTOR3 (0.0f, 0.0f, 0.0f), &D3DXVECTOR3 (0.0f, 1.0f, 0.0f)); 
    d3ddev->SetTransform(D3DTS_VIEW, &mView); 
    }
}


Danke schon mal!

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

2

26.08.2009, 14:50

C-/C++-Quelltext

1
2
D3DXMATRIX matView; 
D3DXMatrixIdentity ( matView );

3

26.08.2009, 15:47

Danke, aber leider gehts immer noch nich

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

4

26.08.2009, 16:38

Ich würde mal sagen, dass du Funktion mal aussen vor lässt und probierst einfach einmal eine stehende Kamera zu machen. ;)

Schau sonst mal in dieses Tutorial hier:
http://www.chadvernon.com/blog/tutorials/directx9/moving-around-a-3d-world/

Da sollte es auch gnügend Infos geben.

5

26.08.2009, 18:15

ah ok Danke! Noch eine Frage: muss ich die Kamera immer updaten lassen, damit ich mich "bewege"? Wenn ja, wie?

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

7

26.08.2009, 18:44

Ach dafür ist D3DXMatrixTranslation da :D. Hab jetzt mal meine Funktion umgeschrieben, aber ich kann mich immer noch nicht so bewegen wie ich das eigentlich will:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void Bewegen(float geschwindigkeit, D3DXMATRIX m_TransMatrix, D3DXMATRIX matView)
{
    D3DXMatrixIdentity(&matView);
    if(keystate[DIK_A]) {
        D3DXMatrixTranslation(&m_TransMatrix, -geschwindigkeit, position.y, position.z);
    } else if(keystate[DIK_W]) {
        D3DXMatrixTranslation(&m_TransMatrix, position.x, position.y, geschwindigkeit);
    } else if(keystate[DIK_S]) {
        D3DXMatrixTranslation(&m_TransMatrix, position.x, position.y, -geschwindigkeit);
    } else if(keystate[DIK_D]) {
        D3DXMatrixTranslation(&m_TransMatrix, geschwindigkeit, position.y, position.z);
    }
    D3DXMatrixMultiply(&matView, &matView, &m_TransMatrix);
    D3DXMatrixLookAtLH(&matView, &position, &lookat, &up); 
    d3ddev->SetTransform(D3DTS_VIEW, &matView);
}

8

27.08.2009, 13:38

Kann mir keiner sagen wo mein Fehler ist, dass ich mich nicht bewegen kann?

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

9

27.08.2009, 13:59

Wie gesagt schau dir das Tutorial dort an, weil dein Code macht sehr wenig Sinn. ;)

Werbeanzeige