Ogre的ExampleApplication阅读

Ogre的ExampleApplication从Root开始建造一个基本的Ogre应用程序框架,一边看一边把步骤记录下来,不一定是对的,反正差不多:

1.首先是构造函数,ExampleApplication需要构造一个实例,构造函数中将一个Root(Ogre中最基本的东西)和一个FrameListener(用于监听每一帧的输入等信息)指向0。之后,根据不同平台,分别定义了资源文件和配置文件目录。

#ifdef USE_RTSHADER_SYSTEM
mShaderGenerator = NULL;
mMaterialMgrListener = NULL;
#endif

这段东西是干嘛的不知道,看起来好像是用个XX的话就不需要mShaderGenerator和mMaterialMgrListener了,后面对USE_RTSHADER_SYSTEM直接无视了,以后再研究是啥玩意。



2.解析函数删除创建的一堆东西



3.然后进入go方法。go是ExampleApplication的主要方法,在这个方法中程序执行了读取配置文件,读取资源文件,创建场景、摄像机、视口等一系列事情,然后进入渲染循环,并在退出循环后清理。



4.go方法中的读取配置文件等工作是在setup方法中实现的。其中,如果显示配置界面(showConfigDialog)如果不成功,会导致setup方法返回false,程序直接退出。



5.setup这个方法干的活很多:

首先创建了最关键的Root对象mRoot;

然后定义了资源配置文件;

接下来显示配置界面(Ogre实例程序中启动时那个选择D3D或OpenGL渲染的界面),如果显示失败,则返回false,程序就挂了。如果不想每次都启动该界面,用Root的restoreConfig() 判断一下即可。

if (!mRoot->restoreConfig() && !mRoot->showConfigDialog())
{
MessageBoxEx(NULL,L"Load Config Error",L"Exception",MB_OK,0);
}



6.读取界面视频设置后,在chooseSceneManager方法中创建了一个名为ExampleSMInstance的SceneManager;接下来在createCamera中创建名为PlayerCam的摄像机并设置相机的位置,视点(LookAt,就是从哪看过去的)及最近距离(setNearClipDistance,防止相机太近看到背景边缘什么的,对应有一个setFarClipDistance,防止太远把相机放到地表以下);然后在createViewports创建视口Viewport,视口的意思就是在眼睛和投影间切一刀,效果相当于缩小/放大。



7.TextureManager::getSingleton().setDefaultNumMipmaps(5); 这句用于设置默认的纹理细节,可能和第三章地形的terrain.cfg里的DetailTexture效果相同。



8.createResourceListener方法是空的,需要重写才行,不过根据基础教程中的使用,貌似暂时不用也不影响程序跑。



9.loadResource方法中使用ResourceGroupManager::getSingleton().initialiseAllResourceGroups()根据配置文件将资源都读出,使用此方法貌似程序启动会很慢,开始鼠标等待的时间大概都是在干这个。



10.createScene,抽象函数,需要在子类中实现,必须在子类中实现,不实现不能创建对象。



11.createFrameListener创建了一个帧监听,用于监听输入什么的。



12.setup完毕后,进入渲染循环。



大概就这么回事

posted @ 2011-03-27 18:38  朋克  阅读(896)  评论(0编辑  收藏  举报