gpt4 book ai didi

c++ - Direct3D9 无法让垂直 fov 相机工作

转载 作者:行者123 更新时间:2023-11-28 02:01:06 25 4
gpt4 key购买 nike

我正在尝试开始使用 Direct 3D。但我无法让 fov 相机工作。至少不是垂直运动。我知道了原因,但我仍然无法修复它。

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

代码:

D3DXMATRIX viewMat;

static D3DXMATRIX viewRotXMat;
static D3DXMATRIX viewRotYMat;
static D3DXMATRIX viewRotZMat;

static float rotY = 0.0f;
static float rotXZ = 0.0f;

if (GetAsyncKeyState(VK_LEFT)) { rotY += 0.1f; }
if (GetAsyncKeyState(VK_RIGHT)) { rotY -= 0.1f; }

if (GetAsyncKeyState(VK_UP)) { rotXZ += 0.1f; }
if (GetAsyncKeyState(VK_DOWN)) { rotXZ -= 0.1f; }

//POINT pMO = getMouseOffset();
//rotY += pMO.x / 10;
//rotXZ += pMO.y / 10;

D3DXMatrixLookAtLH(&viewMat,
&D3DXVECTOR3(10.0f, 10.0f, 0.0f), //pos
&D3DXVECTOR3(0.0f, 10.0f, 0.0f), //look-at
&D3DXVECTOR3(0.0f, 1.0f, 0.0f)); //weird values


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

d3ddev->SetTransform(D3DTS_VIEW, &(viewMat * viewRotXMat * viewRotYMat * viewRotZMat));


D3DXMatrixPerspectiveFovLH(&projMat,
D3DXToRadian(90),
(FLOAT)SIZEX / (FLOAT)SIZEY,
1.0f,
1000.0f);
d3ddev->SetTransform(D3DTS_PROJECTION, &projMat);

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

最佳答案

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

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 的贡献来解释。

关于c++ - Direct3D9 无法让垂直 fov 相机工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39497636/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com