我在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°。