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

📄 fpvcamera.h

📁 Ion Team Lord Of The Rings Demo 模拟指环王的3D游戏 VS.NET编译 里面提供高级渲染算法
💻 H
字号:
/////////////////////////////////////////////
//	THE CAMERA CLASS
//////////////////////////////////////
#include <math.h>
#define PI_OVER_180 0.0174532925	//used convert degrees to radians

extern HWND hWnd;

class CCamera
  {
  public:
		bool Continue;
    float x;
    float y;
    float z;

    float lookx;
    float looky;
    float lookz;

    float slookx;	//special values for strafe
    float slookz;

    float upx;
    float upy;
    float upz;

    float angleY;
    float angleX;

    void Start(float startx ,float starty,float startz,float startlookx,float startlooky,float startlookz);
    void Position();
    void PositionSkyBox();	//same, but no translation
    void RotateY(float angle);
    void RotateX(float angle);
    //void RotateZ(float angle);	//TODO: implement
    void Walk(float distance);
    void Strafe(float distance);
    void Fly(float height);
    //recording functions
    void StartRecord(char *filename);
    void RecordFrame();
    void EndRecord();
    //playback
    void PlayBack(char *filename);
  private:
    FILE *file;
    unsigned int framecount;
  };

/////////////////////////////////////////////////////////////////

void CCamera::Start(float startx ,float starty,float startz,float startlookx,float startlooky,float startlookz)
{
  x=startx;
  y=starty;
  z=startz;

  lookx=startlookx;
  looky=startlooky;
  lookz=startlookz;

	Continue=false;
}

///////////////////////////////////////////////////////////

void CCamera::Position()
{

  gluLookAt(x,y,z,x+lookx,y+looky,z+lookz,0,1,0);

}

////////////////////////////////////////////////////////////

void CCamera::PositionSkyBox()
{
  gluLookAt(0,0,0,lookx,looky,lookz,0,1,0);
}

///////////////////////////////////////////////////////////

void CCamera::RotateY(float angle)
{
  angleY+=angle;
  lookx=(float)sin(angleY*PI_OVER_180);
  lookz=(float)cos(angleY*PI_OVER_180);
  slookx=lookx;		//special values to keep strafing while looking down/up
  slookz=lookz;

  float Length=(float)sqrt((lookx*lookx)+(looky*looky)+(lookz*lookz));	//normalize the vector
  lookx=lookx/Length;
  looky=looky/Length;
  lookz=lookz/Length;
}


//////////////////////////////////////////////////////////

void CCamera::RotateX(float angle)
{
  angleX+=angle;
  if(angleX>90)
    angleX=90;
  if(angleX<-90)
    angleX=-90;
  looky=(float)tan(angleX*PI_OVER_180);
  slookx=lookx;		//special values to keep strafing while looking down/up
  slookz=lookz;

  float Length=(float)sqrt((lookx*lookx)+(looky*looky)+(lookz*lookz));	//normalize the vector
  lookx=lookx/Length;
  looky=looky/Length;
  lookz=lookz/Length;
}

/////////////////////////////////////////////////

void CCamera::Walk(float distance)
{
  x+=lookx*distance;
  y+=looky*distance;
  z+=lookz*distance;
}

/////////////////////////////////////////////////////

void CCamera::Strafe(float distance)
{
  x-=slookz*distance;
  z+=slookx*distance;
}

////////////////////////////////////////////////////

void CCamera::Fly(float height)
{
  y+=height;
}

/////////////////////////////////////////////////

void CCamera::StartRecord(char *filename)
{
  file=fopen(filename,"w");	//open, this destroys the file
  framecount=0;
  fputc(0,file);	//reserv 4 bytes for the n

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -