MyGUI在Ogre的RTT和直接调用纹理显示
改用MyGUI之后,
用着是不错,可是发现一个问题,资料太少了,
没办法,只能啃代码了,
这里讲MyGUI的两个使用:
1,RTT渲染到纹理:
这个很简单,首先在Layout里确定下要显示的Canvas,
在程序中得到它
MyGUI::Canvas* canvas2;
assignWidget(canvas2,"SceneAddView");
再将其赋于一个RenderBoxScene
wraps::RenderBoxScene mRenderBoxScene;
mRenderBoxScene.setCanvas(canvas2);
再插入Mesh,Ok
(不过Debug下有问题,见上篇,希望有砖家出现答疑)
mRenderBoxScene.injectObject("Robot.mesh");
mRenderBoxScene.setAutoRotation(true);
mRenderBoxScene.setMouseRotation(true);
2,直接使用Ogre中的纹理
如需在一个ImageBox中显示一张Ogre即时生成的纹理,
首先也是得之
MyGUI::ImageBox* mAtlasView;
MyGUI::OgreTexture* mTexture;
assignWidget(mAtlasView, "AtlasView");
再在Ogre的Tex管家那里要得指定的纹理,
Ogre::TexturePtr layer0 = Ogre::TextureManager::getSingletonPtr()->getByName( "<TileImagesetTexture>");
这里将其做了中转,赋给了一张MyGUI的OgreTexture,不清楚其他用法,暂时只能这么hack了
mTexture =(MyGUI::OgreTexture* )MyGUI::RenderManager::getInstance().createTexture("AtlasView");
mTexture->setOgreTexture(layer0);
设置具体纹理的大小
MyGUI::IntCoord coord(0,0,1024,128);
及每张小图的大小(如果要显示整张图,那就直接coord.size())
MyGUI::types::TSize<int> tileSize(64,64);
这里MyGUI不知为何,通过setImageInfo的初始化方法并不会初始化Index,
如果不加下面一行,则图像不能显示
mAtlasView->setItemSelect(0);
mAtlasView->setImageInfo("AtlasView",coord,tileSize);
3,PS:
MyGUI是原生支持OIS的,在CMake里有选项,设置一下即可,上一篇中的做法太蛋疼了。
附上一张MyGUI的架构图
(浏览器不好看,直接另存为吧)