Direct3D9无法让垂直fov相机工作

时间:2016-09-14 18:50:48

标签: c++ view camera directx direct3d

我正在尝试使用Direct 3D。但我不能让fov相机工作。至少不是垂直运动。我想出了原因,但我还是无法解决它。

我正在使用C ++(140)和D3DX9

代码:

(.*)

这是我的RenderFrame函数的重要部分。 它不起作用的原因是因为 rotY和rotXZ。出于某种原因,当我将相机转动约45°时,rotY变量仅变为3-4。那么为什么D3DXMatrixRotationY函数不是以一个角度作为参数而是一些浮动?该参数甚至被命名为angle ...我现在已经解决了这个问题大约3天了。我希望你能帮助我。

1 个答案:

答案 0 :(得分:2)

旋转矩阵的设置看起来有点奇怪:

D3DXMatrixRotationY(&viewRotYMat, rotY);
D3DXMatrixRotationX(&viewRotXMat, cos(rotY) * rotXZ);
D3DXMatrixRotationZ(&viewRotZMat, (sin(rotY) * rotXZ) * -1);

你到底想要达到什么目的?通常你只需要做几次轴旋转然后将它们组合起来,你的代码看起来就像那样,但是矩阵组合的乱序,然后用一些显式三角函数进行补偿。只有

才有可能做同样的事情
D3DXMatrixRotationY(&viewRotYMat, rotY);
D3DXMatrixRotationX(&viewRotXMat, rotXZ);

否则你可以使用D3DXMatrixRotationYawPitchRoll至少将3个角度组合成一行。

至于rotY值,请记住它预计以弧度为单位,因此3-4对应180°。相反,观察45°可以通过rotXZ贡献来解释。