Ogre输出屏幕2d文字(Overlay文字)

参考: 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)

其中配置文件配置比较简单,程序创建的比较灵活

 

配置文件创建Overlay文件

/

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();


 


2. 配置文件创建-创建中文文字


创建中文文字的话,需要中文字库的支持
参考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();


 

程序创建Overlay文字

/

例子如下

// 参考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 转载请标明来源)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

春夜喜雨

稀罕你的喜欢!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值