⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xcamera.h

📁 XMathLib是一个通用的3D图形数学库。 其中包含两个部分: XMathLib和XGeomLib。分别处理数学和几何运算。 数学部分包含向量、矩阵、四元数的运算。以及其它的运算。 几何部分
💻 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 + -