zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    双链表
    单链表
    二叉树的遍历
    leetcode-9. 回文数
    leetcode-8. 字符串转换整数 (atoi)
    leetcode-7. 整数反转
    leetcode-6. Z 字形变换
    leetcode-5. 最长回文子串
    manacher-线性查找算法-(最长回文子串问题)
    bfprt-线性查找算法-(topK问题)
  • 原文地址:https://www.cnblogs.com/Zephyroal/p/2052670.html
Copyright © 2011-2022 走看看