6 #include "..\include\raMain.h" 7 #undef min // use __min instead 8 #undef max // use __max instead 25 SetViewParams( &vEyePt, &vLookatPt );
28 SetProjParams(
PI / 4.0f, 1.0f, 1.0f, 1000.0f );
30 GetCursorPos( &m_ptLastMousePosition );
31 m_bMouseLButtonDown =
false;
32 m_bMouseMButtonDown =
false;
33 m_bMouseRButtonDown =
false;
34 m_nCurrentButtonMask = 0;
35 m_nMouseWheelDelta = 0;
37 m_fCameraYawAngle = 0.0f;
38 m_fCameraPitchAngle = 0.0f;
40 SetRect( &m_rcDrag, LONG_MIN, LONG_MIN, LONG_MAX, LONG_MAX );
42 m_bMovementDrag =
false;
45 m_fTotalDragTimeToZero = 0.25;
48 m_fRotationScaler = 0.01f;
51 m_bInvertPitch =
false;
52 m_bEnableYAxisMovement =
true;
53 m_bEnablePositionMovement =
true;
56 m_fFramesToSmoothMouseData = 2.0f;
58 m_bClipToBoundary =
false;
62 m_bResetCursorAfterMove =
false;
70 if( NULL == pvEyePt || NULL == pvLookatPt )
73 m_vDefaultEye = m_vEye = *pvEyePt;
74 m_vDefaultLookAt = m_vLookAt = *pvLookatPt;
78 D3DXMatrixLookAtLH((D3DXMATRIX*)&m_mView, (D3DXVECTOR3*)pvEyePt, (D3DXVECTOR3*)pvLookatPt, (D3DXVECTOR3*)&vUp );
81 D3DXMatrixInverse( &mInvView, NULL, (D3DXMATRIX *)&m_mView );
88 m_fCameraYawAngle = atan2f( pZBasis->
x, pZBasis->
z );
89 float fLen = sqrtf( pZBasis->
z * pZBasis->
z + pZBasis->
x * pZBasis->
x );
90 m_fCameraPitchAngle = -atan2f( pZBasis->
y, fLen );
102 m_fNearPlane = fNearPlane;
103 m_fFarPlane = fFarPlane;
104 D3DXMatrixPerspectiveFovLH( (D3DXMATRIX*)&m_mProj, fFOV, fAspect, fNearPlane, fFarPlane );
108 D3DXMatrixOrthoLH((D3DXMATRIX*)&m_mOrtho, pvWindowSize->
x, pvWindowSize->
y, fNearPlane, fFarPlane);
112 UNREFERENCED_PARAMETER( lParam );
118 if( FALSE == IsKeyDown( m_aKeys[mappedKey] ) )
131 if( mappedKey !=
CAM_UNKNOWN && ( DWORD )mappedKey < 8 )
141 if( !m_bMouseLButtonDown &&
142 !m_bMouseRButtonDown &&
143 !m_bMouseMButtonDown )
154 ( short )LOWORD( lParam ), ( short )HIWORD(lParam )
158 GetCursorPos( &m_ptLastMousePosition );
165 if( !m_bMouseLButtonDown &&
166 !m_bMouseRButtonDown &&
167 !m_bMouseMButtonDown )
178 ( short )LOWORD( lParam ), ( short )HIWORD(lParam )
182 GetCursorPos( &m_ptLastMousePosition );
188 if( !m_bMouseLButtonDown &&
189 !m_bMouseRButtonDown &&
190 !m_bMouseMButtonDown )
200 ( short )LOWORD( lParam ), ( short )HIWORD(lParam )
204 GetCursorPos( &m_ptLastMousePosition );
210 if( ( HWND )lParam != wnd )
216 m_bMouseLButtonDown =
false;
217 m_bMouseMButtonDown =
false;
218 m_bMouseRButtonDown =
false;
219 m_nCurrentButtonMask &= ~MOUSE_LEFT_BUTTON;
220 m_nCurrentButtonMask &= ~MOUSE_MIDDLE_BUTTON;
221 m_nCurrentButtonMask &= ~MOUSE_RIGHT_BUTTON;
229 m_nMouseWheelDelta += ( short )HIWORD( wParam );
237 bool bResetCursorAfterMove )
239 m_vKeyboardDirection =
raVector3( 0, 0, 0 );
240 if( bGetKeyboardInput )
244 m_vKeyboardDirection.z += 1.0f;
246 m_vKeyboardDirection.z -= 1.0f;
247 if( m_bEnableYAxisMovement )
250 m_vKeyboardDirection.y += 1.0f;
252 m_vKeyboardDirection.y -= 1.0f;
255 m_vKeyboardDirection.x += 1.0f;
257 m_vKeyboardDirection.x -= 1.0f;
271 POINT ptCurMouseDelta;
275 GetCursorPos( &ptCurMousePos );
278 ptCurMouseDelta.x = ptCurMousePos.x - m_ptLastMousePosition.x;
279 ptCurMouseDelta.y = ptCurMousePos.y - m_ptLastMousePosition.y;
282 m_ptLastMousePosition = ptCurMousePos;
284 if( m_bResetCursorAfterMove)
295 mi.cbSize =
sizeof( MONITORINFO );
296 GetMonitorInfo( MonitorFromWindow( m_hwnd, MONITOR_DEFAULTTONEAREST ), &mi );
297 ptCenter.x = ( mi.rcMonitor.left + mi.rcMonitor.right ) / 2;
298 ptCenter.y = ( mi.rcMonitor.top + mi.rcMonitor.bottom ) / 2;
299 SetCursorPos( ptCenter.x, ptCenter.y );
300 m_ptLastMousePosition = ptCenter;
305 float fPercentOfNew = 1.0f / m_fFramesToSmoothMouseData;
306 float fPercentOfOld = 1.0f - fPercentOfNew;
307 m_vMouseDelta.x = m_vMouseDelta.x * (
raFloat)fPercentOfOld + (
raFloat)ptCurMouseDelta.x * (
raFloat)fPercentOfNew;
308 m_vMouseDelta.y = m_vMouseDelta.y * (
raFloat)fPercentOfOld + (
raFloat)ptCurMouseDelta.y * (
raFloat)fPercentOfNew;
310 m_vRotVelocity = m_vMouseDelta * m_fRotationScaler;
319 m_vRotVelocity = m_vMouseDelta * m_fRotationScaler + vGamePadRightThumb * 0.02f * fElapsedTime;
321 raVector3 vAccel = m_vKeyboardDirection + m_vGamePadLeftThumb;
328 vAccel *= m_fMoveScaler;
330 if( m_bMovementDrag )
339 m_vVelocity = vAccel;
340 m_fDragTimer = m_fTotalDragTimeToZero;
341 m_vVelocityDrag = vAccel / m_fDragTimer;
346 if( m_fDragTimer > 0 )
349 m_vVelocity -= m_vVelocityDrag * fElapsedTime;
350 m_fDragTimer -= fElapsedTime;
362 m_vVelocity = vAccel;
372 pV->
x = __max( pV->
x, m_vMinBoundary.x );
373 pV->
y = __max( pV->
y, m_vMinBoundary.y );
374 pV->
z = __max( pV->
z, m_vMinBoundary.z );
376 pV->
x = __min( pV->
x, m_vMaxBoundary.x );
377 pV->
y = __min( pV->
y, m_vMaxBoundary.y );
378 pV->
z = __min( pV->
z, m_vMaxBoundary.z );
443 SetViewParams(&m_vDefaultEye, &m_vDefaultLookAt );
483 fPitchDelta = -fPitchDelta;
494 D3DXMATRIX mCameraRot;
498 D3DXVECTOR3 vWorldUp, vWorldAhead;
499 D3DXVECTOR3 vLocalUp = D3DXVECTOR3( 0, 1, 0 );
500 D3DXVECTOR3 vLocalAhead = D3DXVECTOR3( 0, 0, 1 );
501 D3DXVec3TransformCoord( &vWorldUp, &vLocalUp, &mCameraRot );
502 D3DXVec3TransformCoord( &vWorldAhead, &vLocalAhead, &mCameraRot );
505 D3DXVECTOR3 vPosDeltaWorld;
512 D3DXVec3TransformCoord( &vPosDeltaWorld, (D3DXVECTOR3 *)&vPosDelta, (D3DXMATRIX *)&mCameraRot );
524 D3DXMatrixLookAtLH( (D3DXMATRIX *)&
m_mView, (D3DXVECTOR3*)&
m_vEye, (D3DXVECTOR3*)&
m_vLookAt, (D3DXVECTOR3*)&vWorldUp );
526 D3DXMatrixInverse((D3DXMATRIX *) &
m_mCameraWorld, NULL,(D3DXMATRIX *) &m_mView );
566 fPitchDelta = -fPitchDelta;
577 D3DXMATRIX mCameraRot;
581 D3DXVECTOR3 vWorldUp, vWorldAhead;
582 D3DXVECTOR3 vLocalUp = D3DXVECTOR3( 0, 1, 0 );
583 D3DXVECTOR3 vLocalAhead = D3DXVECTOR3( 0, 0, 1 );
584 D3DXVec3TransformCoord( &vWorldUp, &vLocalUp, &mCameraRot );
585 D3DXVec3TransformCoord( &vWorldAhead, &vLocalAhead, &mCameraRot );
588 D3DXVECTOR3 vPosDeltaWorld;
595 D3DXVec3TransformCoord( &vPosDeltaWorld, (D3DXVECTOR3 *)&vPosDelta, (D3DXMATRIX *)&mCameraRot );
601 for(
int i = 0; i < m_pObject.GetSize(); i++)
611 if((m_cDist >= itemp) && (Move ==
true))
625 D3DXMatrixLookAtLH( (D3DXMATRIX *)&
m_mView, (D3DXVECTOR3*)&
m_vEye, (D3DXVECTOR3*)&
m_vLookAt, (D3DXVECTOR3*)&vWorldUp );
627 D3DXMatrixInverse((D3DXMATRIX *) &
m_mCameraWorld, NULL,(D3DXMATRIX *) &m_mView );
virtual long OnMMouseUp(HWND wnd, WPARAM wParam, LPARAM lParam)
virtual D3DUtil_CameraKeys MapKey(UINT nKey)
raVector3 m_vGamePadRightThumb
#define MOUSE_MIDDLE_BUTTON
virtual long OnRMouseDown(HWND wnd, WPARAM wParam, LPARAM lParam)
virtual long OnMMouseDown(HWND wnd, WPARAM wParam, LPARAM lParam)
void SetRotateButtons(bool bLeft, bool bMiddle, bool bRight, bool bRotateWithoutButtonDown=false)
float m_fCameraPitchAngle
bool m_bEnablePositionMovement
#define MOUSE_RIGHT_BUTTON
#define KEY_WAS_DOWN_MASK
virtual void SetViewParams(raVector3 *pvEyePt, raVector3 *pvLookatPt)
raVector3 raVector3Normalize(const raVector3 &v)
virtual long OnLMouseUp(HWND wnd, WPARAM wParam, LPARAM lParam)
virtual void SetOrthoCamera(raVector2 *pvWindowSize, float fNearPlane, float fFarPlane)
virtual bool Intersects(const raVector3 *pRayPos, const raVector3 *pRayDir, float *pDist)
bool m_bRotateWithoutButtonDown
virtual long OnRMouseUp(HWND wnd, WPARAM wParam, LPARAM lParam)
bool m_bEnableYAxisMovement
void ConstrainToBoundary(raVector3 *pV)
virtual void FrameMove(float fTime, float FPS)
virtual long OnKeyUp(HWND wnd, WPARAM wParam, LPARAM lParam)
virtual void FrameMove(float fTime, float FPS)
raFloat raVector3Lenght(const raVector3 &v)
virtual long OnKeyDown(HWND wnd, WPARAM wParam, LPARAM lParam)
void UpdateVelocity(float fElapsedTime)
raFloat raVector3LenghtSq(const raVector3 &v)
virtual long OnLMouseDown(HWND wnd, WPARAM wParam, LPARAM lParam)
virtual long OnCaptureChange(HWND wnd, WPARAM wParam, LPARAM lParam)
virtual void SetProjParams(float fFOV, float fAspect, float fNearPlane, float fFarPlane)
void GetInput(bool bGetKeyboardInput, bool bGetMouseInput, bool bGetGamepadInput, bool bResetCursorAfterMove)
BYTE m_aKeys[CAM_MAX_KEYS]
raVector3 raVector3NormalizeEx(const raVector3 &v)
#define MOUSE_LEFT_BUTTON
bool IsKeyDown(BYTE key) const
virtual long OnMouseWheel(HWND wnd, WPARAM wParam, LPARAM lParam)
bool m_bResetCursorAfterMove