我正在尝试使用Direct 3D。但我不能让fov相机工作。至少不是垂直运动。我想出了原因,但我还是无法解决它。
我正在使用C ++(140)和D3DX9
代码:
(.*)
这是我的RenderFrame函数的重要部分。 它不起作用的原因是因为 rotY和rotXZ。出于某种原因,当我将相机转动约45°时,rotY变量仅变为3-4。那么为什么D3DXMatrixRotationY函数不是以一个角度作为参数而是一些浮动?该参数甚至被命名为angle ...我现在已经解决了这个问题大约3天了。我希望你能帮助我。
答案 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
贡献来解释。