Question

Je veux lier le déplacement d'un objet à un bouton Appuyer. Lorsque j'appuie sur le bouton, l'objet disparaît rapidement et apparaît comme si la première traduction était toujours en cours d'exécution. Ensuite, lorsque je lâche le bouton, il disparaît rapidement et se retrouve là où il aurait été sans toucher le bouton. «Rebond» entre les deux lorsque j'appuie / relâche le bouton.

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();

Je suis toujours vraiment nouveau dans DX11 et j'ai bien regardé autour de moi. Je tire mes cheveux ici en essayant de déterminer ce qui se passe.

Était-ce utile?

La solution

C'est ce que fait votre code. Si un bouton est enfoncé, vous définissez une matrice mondiale, sinon - une autre. Ce que vous devez faire est de multiplier la matrice mondiale par une matrice de traduction nouvellement générée. Notez que cette multiplication se produira ~ 60 fois par seconde, vous devez donc déplacer une très petite distance avec chacun.

Votre code devrait être comme ça

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

Vous devrez peut-être faire

m_Direct3D->SetWorldMatrix(worldMatrix);

Ou quelque chose de similaire. Je ne pense pas que je connais les cours que vous utilisez pour m_camera et m_direct3d.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top