raSystem  1.0 bata
raOrthoCamera.cpp
Go to the documentation of this file.
1 #include "..\include\raMain.h"
2 
3 namespace System
4 {
6 {
7 }
8 
10 {
11 }
12 
13 void raOrthoCamera::SetProjParams(FLOAT w, FLOAT h, FLOAT fNearPlane, FLOAT fFarPlane)
14 {
15  m_fFOV = 0;
16  m_fAspect = w / h;
17  m_fNearPlane = fNearPlane;
18  m_fFarPlane = fFarPlane;
19  D3DXMatrixOrthoLH((D3DXMATRIX*)&m_mProj, w, h, fNearPlane, fFarPlane);
20 }
21 
23 {
24  if( NULL == pvEyePt || NULL == pvLookatPt )
25  return;
26 
27  m_vDefaultEye = m_vEye = *pvEyePt;
28  m_vDefaultLookAt = m_vLookAt = *pvLookatPt;
29 
30  raVector3 vUp( 0,1,0 );
31 
32  //Falls gewählte Blickrichtung parallel zu vUp ist, vUp neu wählen
33  raVector3 viewDir;
34  D3DXVec3Normalize((D3DXVECTOR3*)&viewDir,
35  D3DXVec3Subtract((D3DXVECTOR3*)&viewDir, (D3DXVECTOR3*)pvLookatPt, (D3DXVECTOR3*)pvEyePt));
36  if(1 - abs(D3DXVec3Dot((D3DXVECTOR3*)&vUp, (D3DXVECTOR3*)&viewDir)) <= 0.0001f)
37  vUp = D3DXVECTOR3(1, 0, 0);
38 
39  D3DXMatrixLookAtLH((D3DXMATRIX *) &m_mView,(D3DXVECTOR3*) pvEyePt,(D3DXVECTOR3*) pvLookatPt, (D3DXVECTOR3*)&vUp );
40 
41  D3DXMATRIX mInvView;
42  D3DXMatrixInverse((D3DXMATRIX *)&mInvView, NULL,(D3DXMATRIX *) &m_mView );
43 
44  D3DXVECTOR3* pZBasis = ( D3DXVECTOR3* )&mInvView._31;
45 
46  m_fCameraYawAngle = atan2f( pZBasis->x, pZBasis->z );
47  float fLen = sqrtf( pZBasis->z * pZBasis->z + pZBasis->x * pZBasis->x );
48  m_fCameraPitchAngle = -atan2f( pZBasis->y, fLen );
49 }
50 };
virtual void SetProjParams(FLOAT w, FLOAT h, FLOAT fNearPlane, FLOAT fFarPlane)
~raOrthoCamera(void)
virtual void SetViewParams(raVector3 *pvEyePt, raVector3 *pvLookatPt)