参考: http://www.cnblogs.com/wanghao111/archive/2009/08/11/1543495.html
参考:http://www.cnblogs.com/gogoplayer/archive/2008/05/09/1189795.html
参考:http://hghhe.blog.163.com/blog/static/3237756820097192512944
参考: Pro OGRE 3D Programming
(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu 转载请标明来源)
Ogre文字的生成方法分为:配置文件创建 和 程序创建两中. 两者异曲同工, 都是实现类似定义结构
首先文字定义说明, 然后定义文字2d层,在层中添加container,再加TextArea.
OverlayManager --> OverlayContainer
OverlayContainer --> OverlayContainer / OverlayElement
OverlayElement(PanelOverlayElement/BorderPanelOverlayElement/TextAreaOverlayElement)
其中配置文件配置比较简单,程序创建的比较灵活
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
如果在配置文件中创建的话,方法是:
例如
a. 在sample.fontdef中配置字体定义
MyFont1 { type truetype source solo5.ttf size 16 resolution 96 }
b. 创建sample.overlay,在里面定义
(注意:范围不能过大,否则可能不能正常展示)
(注意: material Core/StatsBlockCenter 为文字底色背景)
MyOverlay { zorder 499 container BorderPanel(MyContainer3) { metrics_mode pixels left 0 top 10 width 300 height 200 material Core/StatsBlockCenter element TextArea(MyTextArea3) { metrics_mode pixels top 10 left 50 width 200 height 50 font_name MyFont1 char_height 19 caption who am i colour_top 1 1 0.7 colour_bottom 1 1 0.7 } } }
c. 需要在程序中对MyOverlay的显示
// 加载字体 Ogre::FontManager::getSingleton().getByName("MyFont1")->load(); // 显示二维层 Ogre::OverlayManager* p = Ogre::OverlayManager::getSingletonPtr(); Ogre::Overlay* pOverlay = p->getByName("MyOverlay"); pOverlay->show();
创建中文文字的话,需要中文字库的支持
参考http://www.cnblogs.com/wanghao111/archive/2009/08/11/1543495.html这篇文章的介绍
例如使用simhei.ttf,添加几个文字
a. 在sample.fontdef中配置字体定义
MyChsFont1 { type truetype source simhei.ttf size 16 resolution 96 code_points 25105-25105 26159-26159 35841-35841 33-166 }
注意: code_points中为汉字和英文字母的unicode的wchar十进制值. 汉字字库比较大,全加载的话比较耗时.这种使用哪些加哪些的方法据说比较节省消耗.
b.在sample.overlay中定义
MyOverlay { zorder 499 container BorderPanel(MyContainer3) { metrics_mode pixels left 0 top 10 width 300 height 200 material Core/StatsBlockCenter element TextArea(MyTextArea4) { metrics_mode pixels top 70 left 50 width 200 height 50 font_name MyChsFont1 char_height 19 caption 我是谁 colour_top 1 1 0.7 colour_bottom 1 1 0.7 } } }
c.在程序中,加载这个字体
// 加载字体 Ogre::FontManager::getSingleton().getByName("MyChsFont1")->load(); // 显示二维层 Ogre::OverlayManager* p = Ogre::OverlayManager::getSingletonPtr(); Ogre::Overlay* pOverlay = p->getByName("MyOverlay"); pOverlay->show();
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
例子如下
// 参考http://hghhe.blog.163.com/blog/static/3237756820097192512944/ // 添加Font Ogre::FontPtr font = Ogre::FontManager::getSingleton().create("MyCodeFont", "General"); font->setSource("simhei.ttf"); // 设置字体源 font->setType(FT_TRUETYPE); // 设置字体类型 font->setTrueTypeSize(18); // 设置字体大小: 生成纹理的大小,值越大生成纹理所花的时间也就越多 font->setTrueTypeResolution(96); // 设置字体的打印分辨率,一般为96 font->addCodePointRange(Font::CodePointRange(33,166)); // 设置英文-unicode的int值范围 font->addCodePointRange(Font::CodePointRange(19968,40869)); // 设置汉字-unicode的int值范围 font->load(); // 加载字体 // create an overlay and set the zorder of overlay m_pOverlay= Ogre::OverlayManager::getSingleton().create("shapeName"); m_pOverlay->setZOrder(254); m_pOverlay->show(); // create container and add to overlay Ogre::OverlayContainer* m_pContainer = static_cast<Ogre::OverlayContainer*>(Ogre::OverlayManager::getSingleton().createOverlayElement("BorderPanel", "container1")); m_pContainer->setMetricsMode(GMM_RELATIVE); m_pContainer->setPosition(0, 0); m_pContainer->setWidth(0.2); m_pContainer->setHeight(0.1); m_pContainer->setMaterialName("Core/StatsBlockCenter"); // add container to overlay m_pOverlay->add2D(m_pContainer); // font load Ogre::FontPtr pFont = Ogre::FontManager::getSingleton().getByName("MyFont"); pFont->load(); // add text area element to conainter OverlayElement* textArea = OverlayManager::getSingleton().createOverlayElement("TextArea", "MyText"); textArea->setMetricsMode(GMM_RELATIVE); textArea->setPosition(0, 0); textArea->setWidth(0.2); textArea->setHeight(0.1); textArea->setParameter("font_name", "MyFont"); // simhei.ttf textArea->setParameter("font_name", "MyCodeFont"); // simhei.ttf //textArea->setParameter("font_name", "BlueHighway"); //textArea->setParameter("font_name", "StarWars"); //textArea->setParameter("font_name", "SdkTrays/Value"); textArea->setParameter("char_height", StringConverter::toString(Ogre::Real(0.05))); textArea->setParameter("horz_align", "left"); textArea->setColour(Ogre::ColourValue(0.0, 1.0, 0.0)); textArea->setCaption(Ogre::DisplayString(L"Test三角形我的中国心\nTest\Test")); m_pContainer->addChild(textArea);
(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu 转载请标明来源)