Direcx 9摄像头设置



我在directx9下配置我的相机设置,我实现的是能够观看180度,但我无法达到360度。以下是代码:

float x = 0;
float y = 0;
float z = 10;
float dx = 0;
float dy = 0;
void FreeMotion()
{
    if(::GetAsyncKeyState('W') )
    {
        z -= 0.3;
    }
    if(::GetAsyncKeyState('S') )
    {
        z += 0.3;
    }
    if(::GetAsyncKeyState('A') )
    {
        x += 0.7;
    }
    if(::GetAsyncKeyState('D') )
    {
        x -= 0.1;
    }
    if(::GetAsyncKeyState('R') )
    {
        y += 0.1;
    }
    if(::GetAsyncKeyState('F') )
    {
        y -= 0.1;
    }
    if(::GetAsyncKeyState(VK_RIGHT) )
    {
        dx -= 0.1;
    }
    if(::GetAsyncKeyState(VK_LEFT) )
    {
        dx += 0.1;
    }
    if(::GetAsyncKeyState(VK_UP) )
    {
        dy += 0.1;
    }
    if(::GetAsyncKeyState(VK_DOWN) )
    {
        dy -= 0.1;
    }
}
void render()
{
    d3ddev->Clear(0,NULL,D3DCLEAR_TARGET,D3DCOLOR_XRBG(0,0,0),1.0,0);
    d3ddev->BeginScene();
FreeMotion();
        D3DXMATRIX View;
        D3DXMatrixLookAtLH(&View,&D3DXVECTOR3(x,y,z),&D3DXVECTOR3(x+dx,y+dy,z-10),&D3DXVECTOR3(0,1,0));
        d3ddev->SetTransform(D3DTS_VIEW,&View);

因此,这段代码让我能够四处移动,但不会向后看!有人能告诉我如何让它看起来360度吗?

我认为将dxdy解释为旋转角度更有意义。然后,您可以将视图目标计算为:

target = (x, y, z) + (sin(dx) * cos(dy), sin(dy), -cos(dx) * cos(dy))

D3DXMatrixLookAtLH调用中更新此计算,您应该会获得360°。

最新更新