学无止尽
Ogre3D 1.7废除了将近10年的简单Sample框架,采用了一种插件浏览器的方式载入不同的Sample。
SampleBrowser类型:派生于SampleContext类型,并实现SdkTrayListener接口
Ogre例子浏览器,展示了一个所有例子的目录,并进行动态配置,资源载入,接点分类等工作。
SampleContext类型:为Sample提供了一个标准的上下文,可以管理Sample类型的子类。在同一时间允许一个Sample运行,并管理一个Sample队列。
Sample类型:所有Sample类型的基类,被用来派生新的Sample类型。
FileSystemLayer类型 :提供在不同系统中找到Ogre配置文件的方法。
SamplePlugin类型 :在插件中保存一个Sample集合(SampleSet)。
SdkCameraMan类型:摄像机控制类型
SdkTrays.h(里面包含一系列类型):提供一个完整的操作界面,用Overlay作为底层。
流程:
和以往一样的创建了Ogre::Root对象,唯一不同的是通过FileSystemLayer类型的mFSLayer实例来搜索不同平台相应的配置文件(我怀疑是因为为了支持iPhone等新平台而采用的)。这里我把原来的获取路径注释了,因为获得的路径有问题,导致读写配置文件失败
5. if (!oneTimeConfig()) return;检查是否有配置文件(第一次运行是没有的),如果没有配置文件则弹出配置窗口,否则直接载入配置文件。
6.if (!mFirstRun) mRoot->setRenderSystem(mRoot->getRenderSystemByName(mNextRenderer));如果用户切换渲染器的时候运行。
7.setup();配置系统(这里比较长,放到后面单独来说)
8.if (!mFirstRun) recoverLastSample();如过是用户切换了系统,那么就还原上次执行的Sample。else if (initialSample) runSample(initialSample);否则运行初始化的Sample。
9.mRoot->startRendering(); 开始渲染循环。
10.mRoot->saveConfig();循环结束之后储存配置文件。
11.shutdown();关闭(释放资源)。
12.if (mRoot) OGRE_DELETE mRoot;删除Ogre::Root类型实例。
virtual void SampleContext::setup()基本上和以前的流程一样。
但是SampleBrowser在自己的实现中重载了这个方法
这里和前面的主要区别是创建了Dummy场景,并配置了界面(SdkTrayManager),最后载入startupSample。
Copyright @ Nightsky Powered by: .Text and ASP.NET Theme by: .NET Monster