camera Rotation mit DirectX



  • Ich versuche gerade mit DirectX die Camera zu rotieren, doch anstatt der Kamera rotiert bloß das Objeckt

    D3DXMATRIX matrix;
    	D3DXMATRIX ViewMatrix;
    	D3DXMATRIX Rmatrix;
    
        D3DXMatrixLookAtLH(&ViewMatrix,
                           &D3DXVECTOR3( 0.0f,  0.0f,-10.0f ),
                           &D3DXVECTOR3( 0.0f,  0.0f, 0.0f ),
                           &D3DXVECTOR3( 0.0f,  1.0f, 0.0f ));
        D3DXMatrixRotationY(&Rmatrix,CR);
    	D3DXMatrixMultiply(&ViewMatrix,&Rmatrix,&ViewMatrix);
    	lp3DDevice->SetTransform(D3DTS_VIEW,&ViewMatrix);
        lp3DDevice->Clear(0,NULL,D3DCLEAR_TARGET,D3DCOLOR_XRGB(0,0,0),1.0f,0);
    	lp3DDevice->Clear(0,NULL,D3DCLEAR_ZBUFFER,D3DCOLOR_XRGB(0,0,0),1.0f,0);
    	lp3DDevice->BeginScene();
    	lp3DDevice->SetStreamSource(0,Tria,0,sizeof(CustomVertex));
    	lp3DDevice->SetTexture(0,lpTexture);
    	lp3DDevice->DrawPrimitive(D3DPT_TRIANGLELIST,0,2);
    	lp3DDevice->EndScene();
    	lp3DDevice->Present(NULL,NULL,NULL,NULL);
    
    if(bKey[DIK_NUMPAD4])
    	{
    		CR-=0.05f;
    	}
    	if(bKey[DIK_NUMPAD6])
    	{
    		CR+=0.05f;
    	}
    


  • Bist du dir sicher, dass sich nicht doch die Kamera dreht?
    Könnte aber auch sein, dass sich die Sonne um die Erde dreht.

    Mal ein paar Tips:
    ➡ Sowas wie CR-=0.05f; ist böse. Schau dir mal QueryPerformanceTimer an und halte die Rotation synchron
    ➡ Wieso 2 Clear Aufrufe? kombinier doch einfach und benutz D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER anstatt 2 Aufrufe
    ➡ Bei der Kamera würde ich eher die Position und die Ausrichtung speichern und diese rotieren, damit hast du mehr Freiräume. Später kann man daraus ganz leicht eine ViewMatrix machen.


Anmelden zum Antworten