Ogre中摄像机的一些相关函数

来源:互联网 发布:Mac os x几好用 编辑:程序博客网 时间:2024/06/06 06:24


//创建摄像机

//sceneManager是一个已经存在的场景管理器实例的指针。

//我们在这里构建名称为“MainCam”的摄像机。

Camera *camera = sceneMgr->createCamera(“MainCam”);

 

//并不需要计算什么,可以直接从视口中得到这个尺寸 这里现实视口比例是4:3

camera->setAspectRatio(1.333333f);

 

//30度角可以让我们看到一个长而远的视野

camera->setFOVy(30.0f); //图上W是这里的角度

camera->setNearClipDistance(5.0f); //摄像机到平面xy的距离

camera->setFarClipDistance(1000.0f);//摄像机到平面x'y'的距离

 

//设置渲染模式 下面分别对应点线 点 实体渲染

camera->setPolygonMode(PM_WIREFRAME);

camera->setPolygonMode(PM_POINTS);

camera->setPolygonMode(PM_SOLOD);

PolygonMode mode = camera->getPolygonMode(); //这个不用讲了

 

//摄像机的位置变换

 

//确认我们已经有一个指向“Camera”类型实例的指针camera

camera->setPosition(200, 10, 200);

 

//也可以用一个三维向量来设置摄像机坐标,在我们得到场景坐标时候这么做会方便一些

//camera->setPosition(Vector3(200, 10, 200));

 

//假设摄像机还在我们之前设置的200, 10, 200空间位置上。
camera->move(10, 0, 0); //
摄像机移动到210, 10, 200

camera->moveRelative(0, 0, 10); //摄像机移动到210, 10, 210

 

//move ,moveRelative与 setPosition的区别

//setPosition设置摄像机的绝对坐标 move和moveRelative是把摄像机移动到当前位置的相对位置上

//moveRelative与move的区别 前者是在摄像机的本地坐标移动 假设摄像机像右旋转90度 在向前移动10

//个单位,那么本地坐标是向Z方向移动10 而世界坐标是像X方向移动10个单位

 

 

//指向,方向,LookAt

void setDirection(Real x, Real y, Real z);

void setDirection(const Vector3& vec);

Vector3 getDirection(void) const;

Vector3 getUp(void) const;

Vector3 getRight(void) const;

void lookAt( const Vector3& angle);

void lookAt(Real x, Real y, Real z);

void roll(const Radian& angle); //滚动绕Z轴 右手法则 旋转 即逆时针

void roll (Real degrees){roll (Angle ( degrees ) );}

void yaw(const Radian& angle); //偏航绕Y轴

void yaw(Real degrees){yaw (Angle ( degrees ) );}

void pitch(const Radian& angle); //倾斜绕X轴

void pitch(Real degrees){yaw (Angle ( degrees ) );}

void rotate(const Vector3& axis, const Radian& angle);

void rotate(const Vector3& axis, Real degrees){

rotate(axis, Angle(degrees));}

void setFixedYawAxis (bool useFixed, const Vector3 &fixedAxis=Vector3::UNIT_Y)

//设置Y轴自由度 不能绕Y轴旋转

const Quaternion & getOrientation (void) const

void setOrientation(const Quaternion& q);

 

//自动跟踪

/*方法中第一个参数确定是否打开自动跟踪,在任何一帧渲染之前都可以重新设置它。并且需要注意在关掉自动跟踪之前,要确保所被跟踪的节点没有被删除(否则系统会抛出异常)。方法的第二个参数是被跟踪节点得指针,除非你第一个参数是false(这时候可以用NULL),否则你必须确定调用的时候指针指向的节点必须有效。有时候你可能发现你所要跟踪的物体太大了,以至于你都不知道“看”哪里才好,这时候你可以设置第三个参数来定着眼点,它是一个本地空间中相对于场景节点的定位点*/

void setAutoTracking(bool enabled,SceneNode *target=0,const Vector3 &offset=Vector3::ZERO);

 

//得到摄像机相关信息

const Quaternion& getDerivedOrientation(void) const;

const Vector3& getDerivedPosition(void) const;

Vector3 getDerivedDirection(void) const;

Vector3 getDerivedUp(void) const;

Vector3 getDerivedRight(void) const;

const Quaternion& getRealOrientation(void) const;

const Vector3& getRealPosition(void) const;

Vector3 getRealDirection(void) const;

Vector3 getRealUp(void) const;

Vector3 getRealRight(void) const;

     /* 其中有“Real”关键字的方法返回的是世界空间的坐标,而拥有“Derived”关键字的方法的返回值是在“轴绑定”的本地坐标系中(也就是说这个坐标系原点是摄像机所在的点,而它的轴向和世界坐标系相同)。*/

原创粉丝点击