Ogre輸出螢幕2d文字(Overlay文字),ogreoverlay
參考: http://www.cnblogs.com/wanghao111/archive/2009/08/11/1543495.html
參考:http://www.cnblogs.com/gogoplayer/archive/2008/05/09/1189795.html
參考: Pro OGRE 3D Programming
(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu 轉載請標明來源)
Ogre文字的產生方法分為:設定檔建立 和 程式建立兩中. 兩者異曲同工, 都是實作類別似定義結構
首先文字定義說明, 然後定義文字2d層,在層中添加container,再加TextArea.
2d-overlay
->container
->container/element
其中設定檔配置比較靈活易於理解,介紹如下: (特別感謝參考文章的作者,要不然還真不知道咋弄.)
1. 設定檔建立-建立英文文字
如果在設定檔中建立的話,方法是:
例如
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();
3. 設定檔建立-建立中文文字
建立中文文字的話,需要中文字型檔的支援
參考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();
(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu 轉載請標明來源)