我正在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;
我希望移动带有摄像机矩阵或连接到摄像机的矩阵的网格。我已经可以使用相机了,但是模型不符合我的预期。