我正在嘗試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 *等 –