ULRE/inc/hgl/graph/Camera.h

72 lines
3.3 KiB
C++

#ifndef HGL_GRAPH_CAMERA_INCLUDE
#define HGL_GRAPH_CAMERA_INCLUDE
#include<hgl/math/Math.h>
namespace hgl
{
namespace graph
{
/**
* 摄像机数据结构
*/
struct Camera
{
float width; ///<视图宽
float height; ///<视图高
float fov; ///<水平FOV
float znear,zfar; ///<Z轴上离眼睛的距离
Vector3f eye; ///<眼睛坐标
Vector3f center; ///<视点坐标
Vector3f up_vector; ///<向上量
Vector3f forward_vector; ///<向前量
};//struct Camera
void CameraToFrustum(Frustum *,const Camera *);
void MakeCameraMatrix(Matrix4f *proj,Matrix4f *mv,const Camera *cam);
/**
* 行走模拟像机
*/
class WalkerCamera:public Camera
{
public: //方法
virtual void Backward(float=0.01); ///<向后
virtual void Forward(float step=0.01){Backward(-step);} ///<向前
virtual void Up(float step=0.01); ///<向上
virtual void Down(float step=0.01){Up(-step);} ///<向下
virtual void Right(float step=0.01); ///<向右
virtual void Left(float step=0.01){Right(-step);} ///<向左
public: //以自身为中心旋转
virtual void BackwardRotate(float=5); ///<以自身为中心向后旋转
virtual void ForwardRotate(float ang=5){BackwardRotate(-ang);} ///<以自身为中心向前旋转
virtual void UpRotate(float=5); ///<以自身为中心向上旋转
virtual void DownRotate(float ang=5){UpRotate(-ang);} ///<以自身为中心向下旋转
virtual void RightRotate(float=5); ///<以自身为中心向右旋转
virtual void LeftRotate(float ang=5){RightRotate(-ang);} ///<以自身为中心向左旋转
public: //以目标点为中心旋转
virtual void CenterUpRotate(float=5); ///<以目标点为中心向上旋转
virtual void CenterDownRotate(float ang=5){CenterUpRotate(-ang);} ///<以目标点为中心向下旋转
virtual void CenterRightRotate(float ang=5); ///<以目标点为中心向右旋转
virtual void CenterLeftRotate(float ang=5){CenterRightRotate(-ang);} ///<以目标点为中心向左旋转
public: //距离
virtual void Distance(float=0.9); ///<调整距离
};//class WalkerCamera
}//namespace graph
}//namespace hgl
#endif//HGL_GRAPH_CAMERA_INCLUDE