ajout deplacement camera avec la souris

This commit is contained in:
StratiX0 2024-04-03 11:07:53 +02:00
parent bbb31b1161
commit 5817867594
4 changed files with 62 additions and 32 deletions

View File

@ -4,6 +4,7 @@ PositionClass::PositionClass()
{
m_frameTime = 0.0f;
m_rotationY = 0.0f;
m_rotationX = 0.0f;
m_leftTurnSpeed = 0.0f;
m_rightTurnSpeed = 0.0f;
}
@ -24,9 +25,10 @@ void PositionClass::SetFrameTime(float time)
return;
}
void PositionClass::GetRotation(float& y)
void PositionClass::GetRotation(float& y, float& x)
{
y = m_rotationY;
x = m_rotationX;
return;
}
@ -92,5 +94,38 @@ void PositionClass::TurnRight(bool keydown)
m_rotationY -= 360.0f;
}
return;
}
void PositionClass::TurnMouse(float deltaX, float deltaY)
{
// The turning speed is proportional to the horizontal mouse movement
m_horizontalTurnSpeed = deltaX * 0.1f;
// Update the rotation using the turning speed
m_rotationY += m_horizontalTurnSpeed;
if (m_rotationY < 0.0f)
{
m_rotationY += 360.0f;
}
else if (m_rotationY > 360.0f)
{
m_rotationY -= 360.0f;
}
// The turning speed is proportional to the vertical mouse movement
m_verticalTurnSpeed = deltaY * 0.1f;
// Update the rotation using the turning speed
m_rotationX += m_verticalTurnSpeed;
if (m_rotationX < -90.0f)
{
m_rotationX = -90.0f;
}
else if (m_rotationX > 90.0f)
{
m_rotationX = 90.0f;
}
return;
}

View File

@ -19,15 +19,16 @@ public:
~PositionClass();
void SetFrameTime(float);
void GetRotation(float&);
void GetRotation(float&, float&);
void TurnLeft(bool);
void TurnRight(bool);
void TurnMouse(float, float);
private:
float m_frameTime;
float m_rotationY;
float m_leftTurnSpeed, m_rightTurnSpeed;
float m_rotationY, m_rotationX;
float m_leftTurnSpeed, m_rightTurnSpeed, m_horizontalTurnSpeed, m_verticalTurnSpeed;
};
#endif

View File

@ -572,11 +572,14 @@ void ApplicationClass::Shutdown()
bool ApplicationClass::Frame(InputClass* Input)
{
int mouseX, mouseY;
int mouseX, mouseY, currentMouseX, currentMouseY;
bool result, mouseDown, keyDown;
float rotationY;
float rotationY, rotationX;
float frameTime;
static int lastMouseX = 0, lastMouseY = 0;
static float rotation = 360.0f;
static float x = 6.f;
static float y = 3.f;
@ -594,6 +597,19 @@ bool ApplicationClass::Frame(InputClass* Input)
return false;
}
// Get the location of the mouse from the input object,
Input->GetMouseLocation(mouseX, mouseY);
currentMouseX = mouseX;
float deltaX = currentMouseX - lastMouseX; // Calculez le déplacement de la souris
lastMouseX = currentMouseX; // Mettez à jour la dernière position de la souris pour la prochaine image
currentMouseY = mouseY;
float deltaY = currentMouseY - lastMouseY; // Calculez le déplacement de la souris
lastMouseY = currentMouseY; // Mettez à jour la dernière position de la souris pour la prochaine image
// Set the frame time for calculating the updated position.
m_Position->SetFrameTime(m_Timer->GetTime());
@ -604,11 +620,13 @@ bool ApplicationClass::Frame(InputClass* Input)
keyDown = Input->IsRightArrowPressed();
m_Position->TurnRight(keyDown);
m_Position->TurnMouse(deltaX, deltaY);
// Get the current view point rotation.
m_Position->GetRotation(rotationY);
m_Position->GetRotation(rotationY, rotationX);
// Set the rotation of the camera.
m_Camera->SetRotation(0.0f, rotationY, 0.0f);
m_Camera->SetRotation(rotationX, rotationY, 0.0f);
m_Camera->Render();
// Render the graphics scene.
@ -648,9 +666,6 @@ bool ApplicationClass::Frame(InputClass* Input)
return false;
}
// Get the location of the mouse from the input object,
Input->GetMouseLocation(mouseX, mouseY);
// Check if the mouse has been pressed.
mouseDown = Input->IsMousePressed();
@ -661,25 +676,6 @@ bool ApplicationClass::Frame(InputClass* Input)
return false;
}
//// Obtenez la position de la souris
//Input->GetMouseLocation(mouseX, mouseY);
//// Calculez la distance parcourue par la souris depuis le dernier frame
//float deltaX = mouseX - m_previousMouseX;
//float deltaY = mouseY - m_previousMouseY;
//// Mettez à jour les positions précédentes de la souris
//m_previousMouseX = mouseX;
//m_previousMouseY = mouseY;
//// Utilisez deltaX et deltaY pour ajuster la rotation de la caméra
//float rotationSpeed = 0.1f; // Ajustez cette valeur pour changer la vitesse de rotation
//float rotationX = m_Camera->GetRotation().x + deltaY * rotationSpeed;
//float rotationY = m_Camera->GetRotation().y + deltaX * rotationSpeed;
//// Mettez à jour la rotation de la caméra
//m_Camera->SetRotation(rotationX, rotationY, 0.0f);
// Update the sprite object using the frame time.
m_Sprite->Update(frameTime);

View File

@ -87,8 +87,6 @@ private:
PositionClass* m_Position;
FrustumClass* m_Frustum;
XMMATRIX m_baseViewMatrix;
float m_previousMouseX;
float m_previousMouseY;
};
#endif