在查看Ogre例子时,想看材质要里的纹理,着色器代码都需要每个去查找,非常麻烦.也想看更新每个Ogre里的对象后有什么效果.然后看到Compositor组件与粒子组件时,想到能实时编辑着色器代码实时更新渲染.
开始想着C++做界面麻烦,用C#的winForm做,后面发现首先结合层比较麻烦,然后C#与C++一起调试也会比较麻烦,还有一些比较奇怪的异常也会麻烦.好吧,不如全用C++做,在学习能用在Ogre中的UI时,主要了解了包括Ogre自己的Overlay, CEGUI, MyGUI等等,最终选择MyGUI,因为他小,功能全,代码容易理解,这样拓展起来也方便.因此最终选定Ogre1.9 + MyGUI3.2.2.这二个项目还都是跨平台的,如果有机会,后面可以尝试移值.开发平台暂时选用VS2013.
首先整合MyGUI到Ogre中,这部分主要是加载MyGUI的资源文件与初始化MyGUI的环境.其中初始化整个函数如下.
void initRoot() { String pluginsPath = fsLayer->getConfigFilePath("plugins.cfg"); String logPath = fsLayer->getWritablePath("ogre.log"); root = new Root(pluginsPath, fsLayer->getWritablePath("ogre.cfg"), "ogre.log"); //root->showConfigDialog(); bool foundit = false; for (auto rs : root->getAvailableRenderers()) { root->setRenderSystem(rs); String rname = root->getRenderSystem()->getName(); if (rname == "OpenGL Rendering Subsystem")//"OpenGL Rendering Subsystem" { foundit = true; break; } } if (!foundit) return; //we didn't find it... Raise exception? //we found it, we might as well use it! root->getRenderSystem()->setConfigOption("Full Screen", "No"); root->getRenderSystem()->setConfigOption("Video Mode", "1024 x 768 @ 32-bit colour"); window = root->initialise(true, "Ogre3DX"); Ogre::TextureManager::getSingleton().setDefaultNumMipmaps(5); allResListener = new AllResourceListener(); this->loadUIResources(); this->loadResources(); this->createSceneManager(); this->createView(); this->createGui(); this->createSceneRoot(); }