同之前的教程一样,我么会使用一些 预先写好的 结构作为切入点。
在第3,4讲里面我们会采用类似的方法
在BasicTutorial2类里面加入两个函数createViewport和createCamera,这两个函数在基类BaseApplication是定义好的虚函数
改写头文件如下 BasicTutorial2.h
BasicTutorial2 header
class BasicTutorial2 : public BaseApplication { public: BasicTutorial2(void); virtual ~BasicTutorial2(void); protected: virtual void createScene(void); virtual void createCamera(void); virtual void createViewports(void); };
在对应的实现里面加入
//------------------------------------------------------------------------------------- BasicTutorial2::BasicTutorial2(void) { } //------------------------------------------------------------------------------------- BasicTutorial2::~BasicTutorial2(void) { } //------------------------------------------------------------------------------------- void BasicTutorial2::createCamera(void) { } //------------------------------------------------------------------------------------- void BasicTutorial2::createViewports(void) { } //------------------------------------------------------------------------------------- void BasicTutorial2::createScene(void) {
现在可以编译,但我们会加一些初始化的操作进去
照相机
Ogre的相机
相机是我们用来观看我们所创建的场景的工具。 在OGRE当中,相机的工作原理有些类似于SceneNode, 它具有
setPosition,yaw,rollandpitch这些成员函数,你可以将相机附着到任何一个场景结点,就像SceneNode一样。相机
的位置同样也是针对其父结点而言的。对于移动和旋转操作,你可以把相机视作SceneNode
有一点需要说明的是,Ogre的相机跟我们想象的可能有不同之处。 我们不能创建多个相机,然后每一次使用一个然后
关闭其它的。 那么我们如何进行切换呢? 可以通过创建不同的场景结点作为 “相机的位置结点”, 它们定义了相机
的位置和指向的方向, 当需要展示一个场景的时候, 将相机附着到不同的适合的结点。我们会在FrameListener范例
中见到类似的技巧
创建一个相机
通过重写BaseApplication的函数来创建相机
因为相机跟SceneManager是关联的,所以我们使用SceneManager的对象来创建相机,在函数中加入下列语句
void BasicTutorial2::createCamera(void) { // create the camera mCamera = mSceneMgr->createCamera("PlayerCam"); }
创建一个名为“PlayerCam”的相机,注意可以通过调用getCamera函数来获得SceneManager的相机
接下来我们要做的是设置相机的位置和朝向, 我们把相机放在Z+方向, 朝向三维坐标原点
// set its position, direction mCamera->setPosition(Ogre::Vector3(0,10,500)); mCamera->lookAt(Ogre::Vector3(0,0,0));
lookAt函数非常有趣,你可以直接指定相机的朝向而不用作变换。SceneNodes也有这样一个函数,可以使得实体Entities朝向任何方向
最后我们设置5个单位的a near clipping distance
这个距离决定了我们能够看多远,超过这个距离的东西引擎就不会再进行渲染,通常可以通过这个方法来提高帧率
加入下列代码
// set the near clip distance mCamera->setNearClipDistance(5);
mCamera->setNearClipDistance(5);
setFarClipDistance也可以简单的完成类似的工作
因为我们重写了相机创建,所以我们需要创建一个相机控制器
mCameraMan = new OgreBites::SdkCameraMan(mCamera); // create a default camera controller
目前为止,
createCamera函数的代码如下所示
void BasicTutorial2::createCamera(void) { // create the camera mCamera = mSceneMgr->createCamera("PlayerCam"); // set its position, direction mCamera->setPosition(Ogre::Vector3(0,10,500)); mCamera->lookAt(Ogre::Vector3(0,0