📄 xcamera.h
字号:
#ifndef _X_MATH_CAMERA_H_
#define _X_MATH_CAMERA_H_
#include "XMathLib.h"
using namespace XMathLib;
namespace XGeomLib
{
class XCamera
{
//投影类型。
enum PROJECT_T
{
PT_PROJECT = 0,//透视投影
PT_ORTHO = 1,//平行投影
PT_FRUSTUM = 2//没有实现
};
//定义视口
class XViewRect
{
public:
float m_left;
float m_right;
float m_top;
float m_bottom;
};
public:
//定义人的眼睛信息
class XEye
{
friend class XCamera;
public:
XVector m_Up;
XVector m_EyePos;
XVector m_EyeTarget;
public:
XEye(XVector& EyeTarget,XVector& EyePos,XVector& Up)
:m_Up(Up),m_EyePos(EyePos),m_EyeTarget(EyeTarget)
{
}
XEye();
/*强制取消解构函数的内容*/
~XEye(){};
void ToMatirx(XMatrix& matView);
};
public:
/*****************************************************************
从一个摄影机建立变换。
这些变换包括视变换,投影变换。
*****************************************************************/
void ToMatrix(XMatrix& matView,XMatrix& matProject);
void ToProjectMatrix(XMatrix& matProject);
void ToViewMatrix(XMatrix& matView);
/*****************************************************************
摄影机的俯仰和旋转函数
*****************************************************************/
void Yaw(float angle);
void Pitch(float angle);
void Roll(float angle);
void Circle(float angle);
/*****************************************************************
摄影机的位置改变。函数。
*****************************************************************/
void Toward(float dist);
void UpDown(float dist);
void Shift(float dist);
/*****************************************************************
属性设置函数
set和get函数
*****************************************************************/
void setEye(XCamera::XEye& eye){m_Eye = eye;};
/*****************************************************************
//设置透视投影的信息。
*****************************************************************/
void setFOV(float fov) {m_fFov = fov; }
void setNearPlan(float near_plan) {m_fNear = near_plan; }
void setFarPlan(float far_plan) {m_fFar = far_plan; }
void setAspect(float aspect ) {m_fAspect= aspect; }
/*****************************************************************
//设置视口的大小。只对Ortho的投影方式起作用。
*****************************************************************/
void setViewRect(XViewRect& rect) {m_ViewRect=rect; }
/*****************************************************************
//设置投影类型。
*****************************************************************/
void setProjectType(PROJECT_T type) {m_ProjectType = type ; }
//得到摄影机的投影类型。
PROJECT_T getProjectType() {return m_ProjectType ; }
/*****************************************************************
设计观察口的大小
*****************************************************************/
void setViewRect(float l,float r,float t,float b)
{
m_ViewRect.m_left = l;
m_ViewRect.m_right = r;
m_ViewRect.m_top = t;
m_ViewRect.m_bottom =b;
}
/*****************************************************************
得到摄影机的参数
*****************************************************************/
XEye& getEye() {return m_Eye; }
float getFOV() {return m_fFov; }
float getNearPlan() {return m_fNear; }
float getFarPlan() {return m_fFar; }
float getAspect() {return m_fAspect; }
XViewRect* getViewRect() {return &m_ViewRect; }
public:
virtual void ApplyCamera(){};
XEye m_Eye;
private:
/*
用来建立Project Matrix信息的。
*/
float m_fFov;
float m_fNear;
float m_fFar;
float m_fAspect;
XViewRect m_ViewRect;
PROJECT_T m_ProjectType;
};
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -