我正在尝试Direct 3D的入门。但我无法让fov相机工作。至少不是垂直运动。我想出了为什么,但我仍然无法解决它。Direct3D9无法获得垂直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功能的重要组成部分。 它不会工作的原因是因为 rotY和rotXZ。出于某种原因,当我将摄像机转动45°左右时,rotY变量仅变为3-4。那么为什么D3DXMatrixRotationY函数将角度作为参数,但有些浮点数?该参数甚至是命名角度...我现在在这个问题上约3天。我希望你能帮助我。
你的角度是否为弧度或弧度?它应该作为弧度传递给'D3DXMatrixRotationY'(和'cos' /'sin')。 '&(viewMat * viewRotXMat * viewRotYMat * viewRotZMat)'中的临时右值的地址也不符合标准,但您的编译器可能会支持它。 – user4407569
这是directx教程显示的做法.http://www.directxtutorial.com/ –
rotY显然是弧度。但我定义了一个新的浮动,它以sin度为单位旋转。但它仍然会像以前一样失败。它翻转周围45 *,135 *等 –