Ogre整个流程:
用OgreAppWizard默认选项创建一个工程test,AppWizard会由类BaseApplication继承一个派生类test,作为主要工作类。
调用WinMain():
WinMain()中声明游戏对象test3 app,调用游戏对象的go函数app.go()
go是除构造析构函数外唯一的public函数,它一运行表示整个Ogre程序开始运行。
go()中先调用setup()设置,设置不成功返回
setup()中动态生成Root对象mRoot,调用configure()函数设置比如全屏、渲染器、抗锯齿之类的参数。
configure()中showConfigDialog()调出设置窗口,也就是下图
设置完成点击OK后,mWindow = mRoot->initialise(true, "test3 Render Window");创建渲染的主窗口并链接到mWindow,接着生成图标,至此configure()结束。
回到setup()接着运行chooseSceneManager()函数选择场景管理器,接着调用createCamera()创建摄像机,createViewports()创建视角。
Ogre::TextureManager::getSingleton().setDefaultNumMipmaps(5);接着设置纹理级别?
调用createResourceListener()生成资源监听器,loadResources()载入资源,createFrameListener()生成框架监听器,createScene()生成场景,至此setup结束,所有需要的设置已经设置完毕。
回go()函数,然后mRoot->startRendering()开始渲染。
chooseSceneManager(): 场景管理器的创建
void BaseApplication::chooseSceneManager(void)
{
// Get theSceneManager, in this case a generic one
mSceneMgr= mRoot->createSceneManager(Ogre::ST_GENERIC);
}
这个例子中就在该函数里面直接创建了一个通用的场景管理器,并链接到mScenceMgr。
createCamera(): 摄像机的创建
void BaseApplication::createCamera(void)
{
// Createthe camera
//用场景管理器mScenceMgr在当前场景内创建了一个摄像机
mCamera = mSceneMgr->createCamera("PlayerCam");
//Position it at 500 in Z direction
//设置摄像机位置,用三维坐标描述
mCamera->setPosition(Ogre::Vector3(0,0,80));
// Lookback along –Z
//设置摄像机焦点位置,用三维坐标描述
mCamera->lookAt(Ogre::Vector3(0,0,-300));
//设置远距离裁剪,相当于摄像头的有效摄影距离,在此距离外的物体不会被渲染,提高性能
mCamera->setNearClipDistance(5);
mCameraMan = newOgreBites::SdkCameraMan(mCamera); // create a default camera controller
}
createViewports():视口的创建
void BaseApplication::createViewports(void)
{
// Createone viewport, entire window
//将mCamera拍到的视口给目前的窗口,占据整个窗口
Ogre::Viewport*vp = mWindow->addViewport(mCamera);
//设置背景颜色
vp->setBackgroundColour(Ogre::ColourValue(0,0,0));
// Alterthe camera aspect ratio to match the viewport
//设置相机的宽高比,与视口宽高比匹配,getActualWidth和getActualHeight获得实际宽度高度,相除即为宽高比
mCamera->setAspectRatio(
Ogre::Real(vp->getActualWidth())/ Ogre::Real(vp->getActualHeight()));
}
OGRE三个重要名词:
场景节点(ScenceNode)
Ogre中的对象只有跟场景节点绑定了之后才能被渲染,场景节点也可以与场景节点绑定,作为父场景节点里面的子场景节点,
实体(Entity)
Ogre中可以渲染的对象称为实体,实体只有与场景节点绑定了才可以被渲染,实体并不是被放在场景中(像OpenGL那样),而是在绑定的同时添加位置名称方向等相关信息,来决定实体在场景中的信息。
场景管理器(ScenceManager)
屏幕上所以的东西都是有场景管理器来管理的,比如灯光、摄像机,场景管理器会记录他们的信息,也可以通过场景管理器设置他们。