Directx Direcx 9摄像机设置
我在directx9下配置了我的相机设置,实现了180度的视角,但无法达到360度。下面是代码: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 +
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可能是两个,具体取决于更新频率。我已经让它工作了。谢谢