Wie mache ich eine richtige Kamerasteuerung?



  • Hallo

    Ich bin daran ein Spiel zu programmieren. Und jetzt bin ich daran die Kamera zu programmieren. Ich will mit den Tasten Left, Right, Up und Down, die Kamera steuern. Ich habe bereits begonnen mit dem programmieren der Steuerung, doch irgendwie bleibt die Kamera nicht immer auf dem gleichen weg, wenn ich zB. die Taste Up drücke. Die Kamera geht zwar ins Bild hinein, also Z-Achse.

    Hier der Code:

    void CD3D::InitMatrices()
    {
    	MoveCamera();
    	D3DXMATRIX matView;
        D3DXMatrixLookAtLH(&matView,
    					   &D3DXVECTOR3(fEyeX, fEyeY, fEyeZ),
    					   &D3DXVECTOR3(fLookX, fLookY, fLookZ),
    					   &D3DXVECTOR3(fUpX, fUpY, fUpZ));
        d3ddev->SetTransform(D3DTS_VIEW, &matView);
    
        D3DXMATRIX matProjection;
        D3DXMatrixPerspectiveFovLH(&matProjection,
                                   D3DXToRadian(45),
                                   WINDOW_WIDTH / WINDOW_HEIGHT,
                                   1.0f,
                                   100.0f);
        d3ddev->SetTransform(D3DTS_PROJECTION, &matProjection);
    }
    
    void CD3D::MoveCamera()
    {
    	if(KEY_DOWN(VK_LEFT))
    	{
    		fEyeX += 1.0f;
    		fLookX += 1.0f;
    	}
    
    	if(KEY_DOWN(VK_RIGHT))
    	{
    		fEyeX -= 1.0f;
    		fLookX -= 1.0f;
    	}
    
    	if(KEY_DOWN(VK_UP))
    	{
    		fEyeZ += 1.0f;
    		fUpZ += 1.0f;
    	}
    
    	if(KEY_DOWN(VK_DOWN))
    	{
    		fEyeZ -= 1.0;
    		fUpZ -= 1.0f;
    	}
    }
    

    Kann mir jemand sagen, was ich hier fasch gemacht habe?

    Gruss Patrick



  • Ich sehe da jetzt gerade keinen Fehler, hab meine Steuerung allerdings auch anders gelöst. Beschreib mal was die Kamera tut was sie, deiner Meinung nach, nicht tun sollte?



  • Also wenn ich zur Mitte der Spielfläche gehe, dann dreht die Kamera auf einmal um 180° auf der Z Achse. Ansonsten sollte sie funktionieren.



  • Nach einigem Überlegen dämert mir dein Fehler jetzt, den hatte ich vorhin total übersehen.

    if(KEY_DOWN(VK_UP))
    {
        fEyeZ += 1.0f;
        fUpZ += 1.0f;
    }
    if(KEY_DOWN(VK_DOWN))
    {
        fEyeZ -= 1.0;
        fUpZ -= 1.0f;
    }
    

    Du Modifizierst hier Up, das ist aber dafür zuständig wo an der Kamera oben ist, du musst hier statt Up LookAt modifizieren.



  • Wie kann ich bei der Kamerasteuerung eine Rotation reinbringen, also wenn man auf die linke oder rechte Richtungstaste drückt, sollte die Kamera nach links oder rechts rotieren. Ich denke ich muss da etwas mit Sinus und Cosinus machen. Aber ich weiss nicht wie ich das programmieren soll.



  • du fügst eine Rotation eigentlich genau so ein wie eine Translation.
    Bloß, dass du Die Daten vom fLookX und fLookY veränderst;

    ZB; fLookX+=0.5; wäre eine Drehung der X Achse nach rechts


Anmelden zum Antworten