raSystem  1.0 bata
raCamera.h
Go to the documentation of this file.
1 //--------------------------------------------------------------------------------------
2 // File: Camera.h
3 //
4 // Helper functions for Direct3D programming.
5 //
6 // Copyright (c) Microsoft Corporation. All rights reserved
7 //--------------------------------------------------------------------------------------
8 #pragma once
9 
10  //--------------------------------------------------------------------------------------
11  // used by CCamera to map WM_KEYDOWN keys
12  //--------------------------------------------------------------------------------------
14  {
24  CAM_UNKNOWN = 0xFF
25  };
26 
27  #define KEY_WAS_DOWN_MASK 0x80
28  #define KEY_IS_DOWN_MASK 0x01
29 
30  #define MOUSE_LEFT_BUTTON RMOUSE_LBUTTON
31  #define MOUSE_MIDDLE_BUTTON RMOUSE_MBUTTON
32  #define MOUSE_RIGHT_BUTTON RMOUSE_RBUTTON
33  #define MOUSE_WHEEL 0x08
34 
35  class RAPI raCamera
36  {
37  public:
38  raCamera();
39 
40  // Call these from client and use Get*Matrix() to read new matrices
41  virtual long OnKeyDown(HWND wnd, WPARAM wParam, LPARAM lParam);
42  virtual long OnKeyUp(HWND wnd, WPARAM wParam, LPARAM lParam);
43  virtual long OnRMouseUp(HWND wnd, WPARAM wParam, LPARAM lParam);
44  virtual long OnRMouseDown(HWND wnd, WPARAM wParam, LPARAM lParam);
45  virtual long OnLMouseUp(HWND wnd, WPARAM wParam, LPARAM lParam);
46  virtual long OnLMouseDown(HWND wnd, WPARAM wParam, LPARAM lParam);
47  virtual long OnMMouseUp(HWND wnd, WPARAM wParam, LPARAM lParam);
48  virtual long OnMMouseDown(HWND wnd, WPARAM wParam, LPARAM lParam);
49  virtual long OnCaptureChange(HWND wnd, WPARAM wParam, LPARAM lParam);
50  virtual long OnMouseWheel(HWND wnd, WPARAM wParam, LPARAM lParam);
51 
52  virtual void FrameMove( float fTime, float FPS ) =0;
53  /*{
54  // Wichtig für 3D Sound - Sollte am Ende aufgerufen werdem!!
55  D3DXMatrixInverse((D3DXMATRIX *) &m_mCameraWorld, NULL,(D3DXMATRIX *) &m_mView );
56  }*/
57 
58  // Functions to change camera matrices
59  virtual void Reset();
60  virtual void SetViewParams( raVector3* pvEyePt, raVector3* pvLookatPt );
61  virtual void SetProjParams( float fFOV, float fAspect, float fNearPlane, float fFarPlane );
62  virtual void SetOrthoCamera( raVector2* pvWindowSize, float fNearPlane, float fFarPlane);
63  // Functions to change behavior
64  virtual void SetDragRect( RECT& rc )
65  {
66  m_rcDrag = rc;
67  }
68  void SetInvertPitch( bool bInvertPitch )
69  {
70  m_bInvertPitch = bInvertPitch;
71  }
72  void SetDrag( bool bMovementDrag, FLOAT fTotalDragTimeToZero = 0.25f )
73  {
74  m_bMovementDrag = bMovementDrag; m_fTotalDragTimeToZero = fTotalDragTimeToZero;
75  }
76  void SetEnableYAxisMovement( bool bEnableYAxisMovement )
77  {
78  m_bEnableYAxisMovement = bEnableYAxisMovement;
79  }
80  void SetEnablePositionMovement( bool bEnablePositionMovement )
81  {
82  m_bEnablePositionMovement = bEnablePositionMovement;
83  }
84  void SetClipToBoundary( bool bClipToBoundary, D3DXVECTOR3* pvMinBoundary,
85  raVector3* pvMaxBoundary )
86  {
87  m_bClipToBoundary = bClipToBoundary; if( pvMinBoundary ) m_vMinBoundary = *pvMinBoundary;
88  if( pvMaxBoundary ) m_vMaxBoundary = *pvMaxBoundary;
89  }
90  void SetScalers( FLOAT fRotationScaler = 0.01f, FLOAT fMoveScaler = 5.0f )
91  {
92  m_fRotationScaler = fRotationScaler; m_fMoveScaler = fMoveScaler;
93  }
95  {
96  if( nFrames > 0 ) m_fFramesToSmoothMouseData = ( float )nFrames;
97  }
98  void SetResetCursorAfterMove( bool bResetCursorAfterMove )
99  {
100  m_bResetCursorAfterMove = bResetCursorAfterMove;
101  }
102 
103  // Functions to get state
104  virtual const raMatrix GetViewMatrix()
105  {
106  return raMatrix(m_mView);
107  }
108  virtual const raMatrix GetProjMatrix()
109  {
110  return raMatrix(m_mProj);
111  }
112  virtual const raMatrix GetOrthoMatrix()
113  {
114  return raMatrix(m_mOrtho);
115  }
116  virtual raVector3* GetEyePt()
117  {
118  return &raVector3(m_vEye);
119  }
121  {
122  return &raVector3(m_vLookAt);
123  }
124  virtual float GetNearClip()
125  {
126  return m_fNearPlane;
127  }
128  virtual float GetFarClip()
129  {
130  return m_fFarPlane;
131  }
132 
134  {
135  return &m_mCameraWorld;
136  }
137 
139  {
140  return (raVector3*)&m_mCameraWorld.m11;
141  }
143  {
144  return (raVector3*)&m_mCameraWorld.m21;
145  }
147  {
148  return (raVector3*)&m_mCameraWorld.m31;
149  }
151  {
152  return &m_vVelocity;
153  }
154 
156  {
157  return ( m_bMouseLButtonDown || m_bMouseMButtonDown || m_bMouseRButtonDown );
158  }
160  {
161  return m_bMouseLButtonDown;
162  }
164  {
165  return m_bMouseMButtonDown;
166  }
168  {
169  return m_bMouseRButtonDown;
170  }
171 
172  protected:
173  // Functions to map a WM_KEYDOWN key to a D3DUtil_CameraKeys enum
174  virtual D3DUtil_CameraKeys MapKey( UINT nKey );
175  bool IsKeyDown( BYTE key ) const
176  {
177  return( ( key & KEY_IS_DOWN_MASK ) == KEY_IS_DOWN_MASK );
178  }
179  bool WasKeyDown( BYTE key ) const
180  {
181  return( ( key & KEY_WAS_DOWN_MASK ) == KEY_WAS_DOWN_MASK );
182  }
183 
184  void ConstrainToBoundary( raVector3* pV );
185  void UpdateMouseDelta();
186  void UpdateVelocity( float fElapsedTime );
187  void GetInput( bool bGetKeyboardInput, bool bGetMouseInput, bool bGetGamepadInput,
188  bool bResetCursorAfterMove );
189 
190  protected:
197  double m_GamePadLastActive[4];
198 
200  BYTE m_aKeys[CAM_MAX_KEYS];
210 
217 
218  RECT m_rcDrag;
225 
226  float m_fFOV;
227  float m_fAspect;
229  float m_fFarPlane;
230 
233 
237 
241 
243  HWND m_hwnd ;
244  };
245 
246  class RAPI raCameraFP : public raCamera
247  {
248  public:
249  raCameraFP();
250 
251  virtual void FrameMove( float fTime, float FPS );
252  void SetRotateButtons( bool bLeft, bool bMiddle, bool bRight, bool bRotateWithoutButtonDown = false );
253 
255  {
256  return (raVector3*)&m_mCameraWorld.m41;
257  }
258  protected:
259  int m_nActiveButtonMask; // Mask to determine which button to enable for rotation
261  };
262 
264  {
265  public:
267  float Distance;
268  };
269 
271 
272  class RAPI raColCamera : public raCameraFP
273  {
274  public:
276  {
277  m_Dist = 0.0f;
278  }
279  virtual void FrameMove( float fTime, float FPS );
280 
281  void AddCollisionObject(raRender *pObject, float CoisionDistance)
282  {
283  raColObject Object = { pObject, CoisionDistance };
284  m_pObject.Add(Object);
285  }
287  {
288  return m_cDist;
289  }
290  private:
291  raObjectArray m_pObject;
292  float m_Dist;
293  float m_cDist;
294  };
void SetScalers(FLOAT fRotationScaler=0.01f, FLOAT fMoveScaler=5.0f)
Definition: raCamera.h:90
HWND m_hwnd
Definition: raCamera.h:243
bool m_bClipToBoundary
Definition: raCamera.h:238
virtual const raMatrix GetProjMatrix()
Definition: raCamera.h:108
int m_nMouseWheelDelta
Definition: raCamera.h:207
bool IsMouseLButtonDown()
Definition: raCamera.h:159
virtual void SetDragRect(RECT &rc)
Definition: raCamera.h:64
raVector3 m_vGamePadRightThumb
Definition: raCamera.h:196
raMatrix m_mView
Definition: raCamera.h:191
float GetCurrentDistance()
Definition: raCamera.h:286
raVector3 m_vDefaultEye
Definition: raCamera.h:211
bool m_bInvertPitch
Definition: raCamera.h:234
#define RAPI
Definition: raMain.h:11
bool IsMouseMButtonDown()
Definition: raCamera.h:163
raMatrix m_mCameraWorld
Definition: raCamera.h:192
POINT m_ptLastMousePosition
Definition: raCamera.h:202
float m_fCameraYawAngle
Definition: raCamera.h:215
raRender * Object
Definition: raCamera.h:266
raVector2 m_vMouseDelta
Definition: raCamera.h:208
void SetClipToBoundary(bool bClipToBoundary, D3DXVECTOR3 *pvMinBoundary, raVector3 *pvMaxBoundary)
Definition: raCamera.h:84
float m_fCameraPitchAngle
Definition: raCamera.h:216
raVector3 m_vVelocityDrag
Definition: raCamera.h:221
D3DUtil_CameraKeys
Definition: raCamera.h:13
bool m_bEnablePositionMovement
Definition: raCamera.h:235
virtual raVector3 * GetEyePt()
Definition: raCamera.h:116
raVector2 m_vRotVelocity
Definition: raCamera.h:224
virtual void FrameMove(float fTime, float FPS)=0
#define KEY_WAS_DOWN_MASK
Definition: raCamera.h:27
raMatrix m_mProj
Definition: raCamera.h:193
#define KEY_IS_DOWN_MASK
Definition: raCamera.h:28
raVector3 m_vGamePadLeftThumb
Definition: raCamera.h:195
virtual const raMatrix GetOrthoMatrix()
Definition: raCamera.h:112
void SetInvertPitch(bool bInvertPitch)
Definition: raCamera.h:68
raVector3 m_vEye
Definition: raCamera.h:213
void SetResetCursorAfterMove(bool bResetCursorAfterMove)
Definition: raCamera.h:98
bool m_bRotateWithoutButtonDown
Definition: raCamera.h:260
raVector3 m_vVelocity
Definition: raCamera.h:219
raVector3 * GetEyePt()
Definition: raCamera.h:254
void SetEnableYAxisMovement(bool bEnableYAxisMovement)
Definition: raCamera.h:76
bool m_bEnableYAxisMovement
Definition: raCamera.h:236
raVector3 m_vKeyboardDirection
Definition: raCamera.h:201
raArray< raColObject > raObjectArray
Definition: raCamera.h:270
float m_fMoveScaler
Definition: raCamera.h:232
virtual void FrameMove(float fTime, float FPS)
Definition: racamera.cpp:457
void SetEnablePositionMovement(bool bEnablePositionMovement)
Definition: raCamera.h:80
raVector3 m_vMinBoundary
Definition: raCamera.h:239
bool m_bMouseRButtonDown
Definition: raCamera.h:205
raVector3 * GetVelocity()
Definition: raCamera.h:150
float m_fFarPlane
Definition: raCamera.h:229
float m_fFOV
Definition: raCamera.h:226
raVector3 m_vMaxBoundary
Definition: raCamera.h:240
int m_nActiveButtonMask
Definition: raCamera.h:259
float m_fRotationScaler
Definition: raCamera.h:231
float Distance
Definition: raCamera.h:267
raVector3 m_vLookAt
Definition: raCamera.h:214
virtual raVector3 * GetWorldAhead()
Definition: raCamera.h:146
virtual raMatrix * GetWorldMatrix()
Definition: raCamera.h:133
bool m_bMouseLButtonDown
Definition: raCamera.h:203
virtual const raMatrix GetViewMatrix()
Definition: raCamera.h:104
void SetDrag(bool bMovementDrag, FLOAT fTotalDragTimeToZero=0.25f)
Definition: raCamera.h:72
float m_fNearPlane
Definition: raCamera.h:228
FLOAT m_fTotalDragTimeToZero
Definition: raCamera.h:223
bool IsKeyDown(BYTE key) const
Definition: raCamera.h:175
void SetNumberOfFramesToSmoothMouseData(int nFrames)
Definition: raCamera.h:94
RECT m_rcDrag
Definition: raCamera.h:218
void AddCollisionObject(raRender *pObject, float CoisionDistance)
Definition: raCamera.h:281
raMatrix m_mOrtho
Definition: raCamera.h:194
raVector3 m_vDefaultLookAt
Definition: raCamera.h:212
bool m_bResetCursorAfterMove
Definition: raCamera.h:242
class RAPI raMatrix
Definition: raVector3.h:3
bool IsMouseRButtonDown()
Definition: raCamera.h:167
virtual float GetNearClip()
Definition: raCamera.h:124
virtual raVector3 * GetLookAtPt()
Definition: raCamera.h:120
int m_cKeysDown
Definition: raCamera.h:199
FLOAT m_fDragTimer
Definition: raCamera.h:222
virtual float GetFarClip()
Definition: raCamera.h:128
float m_fAspect
Definition: raCamera.h:227
bool m_bMouseMButtonDown
Definition: raCamera.h:204
bool IsBeingDragged()
Definition: raCamera.h:155
bool WasKeyDown(BYTE key) const
Definition: raCamera.h:179
int m_nCurrentButtonMask
Definition: raCamera.h:206
virtual raVector3 * GetWorldUp()
Definition: raCamera.h:142
virtual raVector3 * GetWorldRight()
Definition: raCamera.h:138
bool m_bMovementDrag
Definition: raCamera.h:220
float m_fFramesToSmoothMouseData
Definition: raCamera.h:209