首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Direct3D9无法使垂直视场摄像头工作

Direct3D9无法使垂直视场摄像头工作
EN

Stack Overflow用户
提问于 2016-09-15 02:50:48
回答 1查看 183关注 0票数 0

我正在尝试开始使用Direct 3D。但我不能让前视摄像头工作。至少不是垂直运动。我想通了为什么,但我还是修不好。

我使用的是C++ (140)和D3DX9

代码:

代码语言:javascript
复制
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函数的重要部分。它不能工作的原因是因为rotY和rotXZ。由于某些原因,当我将相机旋转45度时,rotY变量只会变成3-4。那么,为什么D3DXMatrixRotationY函数不接受角度作为参数,而是接受一些浮点数呢?这个参数甚至被命名为angle...我已经在这个问题上研究了大约3天了。我希望你能帮助我。

EN

回答 1

Stack Overflow用户

发布于 2016-09-15 03:10:34

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

代码语言:javascript
复制
D3DXMatrixRotationY(&viewRotYMat, rotY);
D3DXMatrixRotationX(&viewRotXMat, cos(rotY) * rotXZ);
D3DXMatrixRotationZ(&viewRotZMat, (sin(rotY) * rotXZ) * -1);

你在这里到底想要达到什么目的?通常,你只需要做几次轴旋转,然后组合它们,你的代码看起来就像这样,但是矩阵组合的顺序混乱,然后用一些显式的三角来补偿。有一个很好的机会,你可以做同样的事情

代码语言:javascript
复制
D3DXMatrixRotationY(&viewRotYMat, rotY);
D3DXMatrixRotationX(&viewRotXMat, rotXZ);

否则,您可以使用D3DXMatrixRotationYawPitchRoll至少将三个角度组合在一条直线上。

至于rotY值,请记住,它预计是以弧度测量的,因此3-4相当于180°。相反,观测45°可以用rotXZ贡献来解释。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39497636

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档