📄 camera.h
字号:
#ifdef CGE_HEADER_H
#ifndef CGE_CAMERA_H
#define CGE_CAMERA_H
namespace CGE
{
namespace MATRIX
{
typedef class CAMERA
{
public:
CAMERA(FLOAT fCameraYaw = 0.0f,FLOAT fCameraPitch = 1.0f,FLOAT fCameraRadius = -20.0f)
:m_fCameraYaw(fCameraYaw),m_fCameraPitch(fCameraPitch),m_fCameraRadius(fCameraRadius)
{}
virtual ~CAMERA(){};
FLOAT m_fCameraYaw;
FLOAT m_fCameraPitch;
FLOAT m_fCameraRadius;
D3DXMATRIX MatrixLookAtLH();
D3DXMATRIX MatrixPerspectiveFovLH(FLOAT fovy,FLOAT Aspect,FLOAT zn,FLOAT zf);
D3DXMATRIX MatrixOrthoLH(FLOAT w,FLOAT h,FLOAT zn,FLOAT zf);
}*LPCAMERA;
CGE_INLINE D3DXMATRIX
CAMERA::MatrixOrthoLH(FLOAT w,FLOAT h,FLOAT zn,FLOAT zf)
{
D3DXMATRIX mat;
D3DXMatrixOrthoLH(&mat,w,h,zn,zf);
return mat;
}
CGE_INLINE D3DXMATRIX
CAMERA::MatrixPerspectiveFovLH(FLOAT fovy,FLOAT Aspect,FLOAT zn,FLOAT zf)
{
D3DXMATRIX mat;
D3DXMatrixPerspectiveFovLH(&mat,fovy,Aspect,zn,zf);
return mat;
}
CGE_INLINE D3DXMATRIX
CAMERA::MatrixLookAtLH()
{
if ( m_fCameraPitch < 0.0f )
{
m_fCameraPitch = 6.28f;
}
else if ( m_fCameraPitch > 6.28f )
{
m_fCameraPitch = 0.0f;
}
CHECK_RANGE( m_fCameraYaw, -1.57f, 1.57f );
CHECK_RANGE( m_fCameraRadius, -2000.0f,-5.0f, );
float fDeltaX = (float)(sin(m_fCameraPitch) * sin(m_fCameraYaw) * m_fCameraRadius);
float fDeltaZ = (float)(sin(m_fCameraPitch) * cos(m_fCameraYaw) * m_fCameraRadius);
float fDeltaY = (float)(cos(m_fCameraPitch) * m_fCameraRadius);
D3DXVECTOR3 vEyePt = D3DXVECTOR3( fDeltaX, fDeltaY,fDeltaZ );
D3DXVECTOR3 vLook = D3DXVECTOR3( 0.0f, 0.0f, 0.0f);
D3DXVECTOR3 vUpVec = D3DXVECTOR3( 0.0f, 1.0f, 0.0f );
D3DXVECTOR3 vRight = D3DXVECTOR3( 0.0f, 0.0f, 0.0f );
D3DXMATRIX mat;
D3DXMatrixIdentity( &mat );
D3DXVec3Subtract(&vLook, &vLook, &vEyePt);
D3DXVec3Normalize( &vLook, &vLook );
D3DXVec3Cross( &vRight, &vUpVec, &vLook );
D3DXVec3Normalize( &vRight, &vRight );
D3DXVec3Cross( &vUpVec, &vLook, &vRight );
D3DXVec3Normalize( &vUpVec, &vUpVec );
mat._11 = vRight.x;
mat._12 = vUpVec.x;
mat._13 = vLook.x;
mat._14 = 0.0f;
mat._21 = vRight.y;
mat._22 = vUpVec.y;
mat._23 = vLook.y;
mat._24 = 0.0f;
mat._31 = vRight.z;
mat._32 = vUpVec.z;
mat._33 = vLook.z;
mat._34 = 0.0f;
mat._41 = -D3DXVec3Dot( &vEyePt, &vRight );
mat._42 = -D3DXVec3Dot( &vEyePt, &vUpVec );
mat._43 = -D3DXVec3Dot( &vEyePt, &vLook );
mat._44 = 1.0f;
return mat;
}
}
}
#endif
#endif //
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -