今天我们来谈谈OGRE中的摄像机吧,像机吧,机吧,吧。
首先先来给大家介绍两个函数:createViewport和createCamera,这两个方法已经在基类ExampleApplication中定义了。
我们把这两个函数加到TutorialApplication 类中:
#include "ExampleApplication.h"
class TutorialApplication : public ExampleApplication
{
public:
TutorialApplication()
{
}
~TutorialApplication()
{
}
protected:
virtual void createCamera(void)
{
}
virtual void createViewports(void)
{
}
void createScene(void)
{
//设置背景灯光
mSceneMgr->setAmbientLight( ColourValue( 1, 1, 1 ) );
//第一个机器人
Entity *ent1 = mSceneMgr->createEntity( "Robot", "robot.mesh" );
SceneNode *node1 = mSceneMgr->getRootSceneNode()->createChildSceneNode( "RobotNode" ,Vector3( -100, 0, 0 ) );
node1->attachObject( ent1 );
node1->yaw( Degree( -90 ) );
}
};
cpp文件不做任何修改:
#include "TutorialApplication.h"
#include "windows.h"
INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR strCmdLine, INT )
{
TutorialApplication app;
try
{
app.go();
}
catch( Exception& e )
{
MessageBox( NULL, e.getFullDescription().c_str(), "An exception has occured!", MB_OK | MB_ICONERROR | MB_TASKMODAL);
}
}
我们用这两个方法,演示摄像机和视口具体建立和使用。
首先,先来创建个摄像机。场景管理器里有自带的摄像机,以此来创建我们的摄像机。
添加下面的代码到创建摄像机方法里:
// 创建摄像机
mCamera = mSceneMgr->createCamera("PlayerCam");
这将创建一个叫"PlayerCam"的摄像机。如果你不打算保留它的指针,那么你可以调用场景管理器的方法 getCamera通过传递它的名字来获取它。
接下来,继续设置摄像机的初始位置和朝向。
我们将设置摄像机朝向坐标原点,所以我们需要设置一个恰当的Z轴距离。也就是说,摄像机身在Z轴,朝向原点。
添加下面的代码到刚才的后面:
mCamera->setPosition(Vector3(0,10,500));
mCamera->lookAt(Vector3(0,0,0));
lookAt方法和OpenGL中的是一样的,能够设置它面向任何你想要的角度。
接下来需要设置一个近距离裁剪,该距离内的事物是你看不到的。我们可以将值设为5单位距离。
设置近距离裁剪后,你能够在离实体很近的时候,很容易的透