2011-11-13 62 views
0

即時創建一個3D的房間,您可以用第一人稱視角 走動我已經定義了eyeX eyeY和EYEZ的位置,如下圖所示:DirectX的C++第一人稱視角

float eyeX = 0; 
float eyeY = 100; 
float eyeZ = 75; 

這裏是我的LOOKAT代碼:

D3DXMatrixLookAtLH(&g_matView, &D3DXVECTOR3(eyeX, eyeY,eyeZ), 
         &D3DXVECTOR3(LookatX, LookatY, LookatZ), 
         &D3DXVECTOR3(0.0f, 1.0f, 0.0f)); 
    g_pd3dDevice->SetTransform(D3DTS_VIEW, &g_matView); 

我的代碼讓我移動相機周圍,但不會像第一人稱視角,我在努力實現這一目標。

// forwards = UP ARROW 
    // Backwards = DOWN ARROW 
    // rotate left = LEFT ARROW  
    // rotate right = RIGHT ARROW  



    case WM_KEYDOWN: 
    { 
     // Handle any non-accelerated key commands 
     switch (wparam) 
     { 

    case VK_RIGHT: 
    if(eyeX >=-50) 
     { 
      --eyeX; 
     } 

    return (0); 


    case VK_LEFT: 
    if(eyeX <=50) 
     { 
      ++eyeX; 
     } 
    return (0); 


    case VK_DOWN: 
    if(eyeZ >=-50) 
     { 
      --eyeZ; 
     } 

    return (0); 


    case VK_UP: 
    if(eyeZ <=50) 
     { 
      ++eyeZ; 
     } 
    return (0); 


    case VK_SPACE: 
    if(eyeY >=-50) 
     { 
      --eyeY; 
     } 

    return (0); 


    case VK_SHIFT: 
    if(eyeY <=50) 
     { 
      ++eyeY; 
     } 
    return (0); 

     } 
     break; 
    } 



    LookatX = eyeX + 5.0f; 
    LookatY = eyeY; 
    LookatZ = eyeZ; 

    case WM_DESTROY: 
    { 
     // kill the application   
     PostQuitMessage(0); 

     return(0); 
    } 

    default: 
     break; 

} // end switch 

任何人都可以提出一些變化,這將讓我在我的房間移動像第一人稱視角?

+0

你是否遇到了播放器的移動問題,或者相機的旋轉(環視)? – Hannesh

回答

2

而不是使用D3DXMatrixLookAtLH,你可以保留一個視圖矩陣。

設置

(請注意,我做起來的函數的名稱,您可能需要這些自己創建)的東西

開始像

Matrix view = Matrices.createIdentity(); 

然後每一幀,你設置視圖矩陣(就像你用MatrixLookAtLH獲得的矩陣一樣)

左右移動

通常修改模型矩陣就是這樣。

model = Matrix.multiply(model,transformation). 

但是,你操控相機向後

view = Matrix.multiply(transformation, view) 

只需運行你的switch語句,產生改造和更新視圖矩陣。

e.g:可以在維基百科中找到

if (key == 'w') 
    view = Matrix.multiply(Matrices.createTranslate(0,0,-5), view); 

if (key = 'j') // Key to turn 
    view = Matrix.multiply(Matrices.createRotateY(.1), view); 

公式genereating這些矩陣(或DirectX可能給他們自己的)。

(這是所有基於掀起了簡單的軟件渲染器我前一段時間做的,但它應該同樣適用於DirectX的)

編輯: 噢,它看起來像的DirectX擁有所有這些功能因爲你已經在http://msdn.microsoft.com/en-us/library/windows/desktop/bb281696(v=vs.85).aspx