본문 바로가기

프로그래밍/맵툴(추가포트폴리오준비)

마우스의 움직임을 원하는데로 바꿔봤다.

4번 진행상황중, 마우스의 움직임이 너무 맘에 안들었다.
해골책에서 제공해주는 방법에는 무조건 마우스 정가운데만 커서가 이동하게끔하여 연산했는데
이것은 다른 인터페이스를 사용하는데 조금 치명적이면서 불편했다.

그래서 http://codesampler.com/ 에서 봤었던 소스를 참고하여(이건 윈도프로시져에서 가지고 놀지만..)
해보았고 이제 맘에든다. codesampler은 참 좋은 예제소스로 많이 도와주는것같다.



VOID CGameApp::ProcessMouse()
{
 static POINT OldMousePos;
 POINT CurrentMousePos;
 FLOAT fDelta = 0.001f; //마우스의 민감도
 static BOOL bMousing = FALSE; //마우스클릭시의 움직임

 if(GetAsyncKeyState(VK_LBUTTON) & 0x8000)
 {
  if(!bMousing)
  {
   GetCursorPos(&CurrentMousePos);
   OldMousePos = CurrentMousePos;
   bMousing = TRUE;
  }
 }
 else bMousing = false;

 if(bMousing)
 {
  SetCursor( NULL ); // 마우스를 나타나지 않게 않다.
  GetCursorPos(&CurrentMousePos);

  INT dx = CurrentMousePos.x - OldMousePos.x; // 마우스의 변화값
  INT dy = CurrentMousePos.y - OldMousePos.y; // 마우스의 변화값

  m_pCamera->RotateLocalX( dy * fDelta ); // 마우스의 Y축 회전값은 3D world의  X축 회전값
  m_pCamera->RotateLocalY( dx * fDelta ); // 마우스의 X축 회전값은 3D world의  Y축 회전값

  OldMousePos.x = CurrentMousePos.x;
  OldMousePos.y = CurrentMousePos.y;

  D3DXMATRIX* pmatView = m_pCamera->GetViewMatrix();  // 카메라 행렬을 얻는다.
  m_pD3DDevice->SetTransform( D3DTS_VIEW, pmatView );   // 카메라 행렬 셋팅
 }
}