?? 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//沒有實現(xiàn)
};
//定義視口
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();
/*強制取消解構(gòu)函數(shù)的內(nèi)容*/
~XEye(){};
void ToMatirx(XMatrix& matView);
};
public:
/*****************************************************************
從一個攝影機建立變換。
這些變換包括視變換,投影變換。
*****************************************************************/
void ToMatrix(XMatrix& matView,XMatrix& matProject);
void ToProjectMatrix(XMatrix& matProject);
void ToViewMatrix(XMatrix& matView);
/*****************************************************************
攝影機的俯仰和旋轉(zhuǎn)函數(shù)
*****************************************************************/
void Yaw(float angle);
void Pitch(float angle);
void Roll(float angle);
void Circle(float angle);
/*****************************************************************
攝影機的位置改變。函數(shù)。
*****************************************************************/
void Toward(float dist);
void UpDown(float dist);
void Shift(float dist);
/*****************************************************************
屬性設(shè)置函數(shù)
set和get函數(shù)
*****************************************************************/
void setEye(XCamera::XEye& eye){m_Eye = eye;};
/*****************************************************************
//設(shè)置透視投影的信息。
*****************************************************************/
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; }
/*****************************************************************
//設(shè)置視口的大小。只對Ortho的投影方式起作用。
*****************************************************************/
void setViewRect(XViewRect& rect) {m_ViewRect=rect; }
/*****************************************************************
//設(shè)置投影類型。
*****************************************************************/
void setProjectType(PROJECT_T type) {m_ProjectType = type ; }
//得到攝影機的投影類型。
PROJECT_T getProjectType() {return m_ProjectType ; }
/*****************************************************************
設(shè)計觀察口的大小
*****************************************************************/
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;
}
/*****************************************************************
得到攝影機的參數(shù)
*****************************************************************/
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
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -