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.