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的架构图

(浏览器不好看,直接另存为吧)

inherit__graph__108

posted @ 2011-05-21 11:44  Zephyroal  阅读(1601)  评论(0编辑  收藏  举报