DirectX 11 D3DXMatrixTranslation продолжает работать? - PullRequest
1 голос
/ 16 января 2012

Я хочу привязать перемещение объекта к нажатию кнопки. Когда я нажимаю кнопку, объект быстро исчезает и выглядит так, как будто первый перевод всегда выполнялся. Затем, когда я отпускаю кнопку, она быстро исчезает и оказывается там, где она была бы, не касаясь кнопки. «Отскакивая» между двумя, когда я нажимаю / отпускаю кнопку.

D3DXMATRIX worldMatrix, viewMatrix, projectionMatrix;
bool result;


// Generate the view matrix based on the camera's position.
m_Camera->Render();

// Get the world, view, and projection matrices from the camera and d3d objects.
m_Camera->GetViewMatrix(viewMatrix);
m_Direct3D->GetWorldMatrix(worldMatrix);
m_Direct3D->GetProjectionMatrix(projectionMatrix);

// Move the world matrix by the rotation value so that the object will move.
if(m_Input->IsAPressed() == true) {
D3DXMatrixTranslation(&worldMatrix, 1.0f*rotation, 0.0f, 0.0f);
}
else {
    D3DXMatrixTranslation(&worldMatrix, 0.1f*rotation, 0.0f, 0.0f);
}

// Put the model vertex and index buffers on the graphics pipeline to prepare them for drawing.
m_Model->Render(m_Direct3D->GetDeviceContext());

// Render the model using the light shader.
result = m_LightShader->Render(m_Direct3D->GetDeviceContext(), m_Model->GetIndexCount(), worldMatrix, viewMatrix, projectionMatrix, 
                               m_Model->GetTexture(), m_Light->GetDirection(), m_Light->GetDiffuseColor());


if(!result)
{
    return false;
}

// Present the rendered scene to the screen.
m_Direct3D->EndScene();

Я все еще новичок в DX11, и я хорошо осмотрелся вокруг. Я дергаю себя за волосы, пытаясь понять, что происходит.

1 Ответ

4 голосов
/ 16 января 2012

Это то, что делает ваш код. Если кнопка нажата, вы устанавливаете одну матрицу мира, если нет - другую. Что вам нужно сделать, это умножить матрицу мира на вновь сгенерированную матрицу перевода. Обратите внимание, что это умножение будет происходить ~ 60 раз в секунду, поэтому вам нужно перемещаться на очень маленькое расстояние с каждым из них.

Ваш код должен быть таким

if (m_Input->IsAPressed() == true) {
   D3DXMATRIX translation;
   D3DXMatrixTranslation(&translation, 0.05f, 0.0f, 0.0f);
   worldMatrix *= translation;
}

Возможно, вам придется сделать

m_Direct3D->SetWorldMatrix(worldMatrix);

Или что-то подобное. Я не думаю, что знаком с классами, которые вы используете для m_Camera и m_Direct3D.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...