Directx Direcx 9摄像机设置

Directx Direcx 9摄像机设置,directx,Directx,我在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 +

我在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度吗?

我认为将
dx
dy
解释为旋转角度更有意义。然后计算视图目标为:

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

在你的
D3DXMatrixLookAtLH
调用中更新此计算,你应该得到360°。

D3DXMatrixLookAtLH(&matView,&D3DXVECTOR3(x,y,z),&D3DXVECTOR3(x+(sin(dx)*cos(dy)),y+sin dy),-cos(dx)*cos(dy)),和d3d3dxvector3(0,1,0));如果这是你的意思,那它就没用了。我的相机不稳。这就是我的意思。除了您错过了目标的最后一个组件中的
z
。你说摇晃是什么意思?您可能需要调整更新步长<代码>0.1可能是两个,具体取决于更新频率。我已经让它工作了。谢谢