如何以第一人称视角移动相机?

时间:2019-04-04 03:18:55

标签: c++ directx

我正在DirectX项目中开发第一人称相机,问题是我不知道如何使用相机移动网格,它只能像可以在世界范围内移动的普通相机一样工作,并且可以用鼠标旋转,但可以随网格移动,只能保持静止。

我已经尝试将视图矩阵与“网格矩阵”相乘,但这看起来确实很奇怪,例如使网格变形或获得错误的透视图。

这是我移动相机的代码:

void CManager::cameraMove(ID3D11DeviceContext* &pImmediateContext, ID3D11Buffer*&pCBNeverChanges, WPARAM wParam, float xPos, float yPos)
{
    if (wParam == 37) // Left
    {
        Camera.g_View *= XMMatrixTranslation(m_Cx, 0.0f, 0.0f);
        //DwarfMatrix = Camera.g_View;
        //DwarfMatrix *= translate;
    }
    else if (wParam == 'W') // Front
    {
        Camera.g_View *= XMMatrixTranslation(0.0f, 0.0f, -m_Cz);
    }
    else if (wParam == 39) // Right
    {
        Camera.g_View *= XMMatrixTranslation(-m_Cx, 0.0f, 0.0f);
        //DwarfMatrix *= translateN;
    }
    else if (wParam == 'S') // Back
    {
        Camera.g_View *= XMMatrixTranslation(0.0f, 0.0f, m_Cz);
    }
    else if (wParam == 38) // Up
    {
        Camera.g_View *= XMMatrixTranslation(0.0f, -m_Cy, 0.0f);
    }
    else if (wParam == 40) // Down
    {
        Camera.g_View *= XMMatrixTranslation(0.0f, m_Cy, 0.0f);
    }
    else if (wParam == 'C') // Change Texture
    {
        camChange();
    }

    Camera.cbNeverChanges.mView = XMMatrixTranspose(Camera.g_View);
    pImmediateContext->UpdateSubresource(NeverChangeBuffer.m_Buffer, 0, NULL, &Camera.cbNeverChanges, 0, 0);
}

这是我的模型及其矩阵的代码:

XMMATRIX ModelMatrix = XMMATRIX(
        .03f, 0.0f, 0.0f, m_x,
        0.0f, .03f, 0.0f, m_y,
        0.0f, 0.0f, .03f, m_z,
        0.0f, 0.0f, 0.0f, 1.0f
    );

// Asign the Model to his matrix in render
g_manager.m_mesh[i].m_object.mWorld = g_manager.ModelMatrix;

我希望移动带有摄像机矩阵或连接到摄像机的矩阵的网格。我已经可以使用相机了,但是模型不符合我的预期。

0 个答案:

没有答案