//创建摄像机
//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”关键字的方法的返回值是在“轴绑定”的本地坐标系中(也就是说这个坐标系原点是摄像机所在的点,而它的轴向和世界坐标系相同)。*/