Ogre对于3D的渲染效果和速度的优势是大家公认的 ,对于如何用Ogre渲染2D似乎对很多人是个疑问,其实并不是因为Ogre渲染2D不好,只是在目前的1.0和1.2版本中Ogre没有提供方便的接口或者类来做这件事,这就给很多用Ogre的人造成了麻烦,比如在汽车、飞机游戏中渲染一个HUD,很多人感觉无从下手。
其实目前可以有多种方法实现2D的:
1. 用Ogre的Overlay,就是通常显示FPS的那个东东,只要根据自己的需要贴上相应的纹理就可以了。当然估计也可以将Render to texture的结果贴上去。
2. 有一片Ogre的wiki,叫SpriteMananger2d的,具体内容可以在这个网址看到,http://www.ogre3d.org/wiki/index.php/SpriteManager2d,它利用了RenderQueueListner、RenderSystem、RenderOperation和VertexHardwareBuffer这几个类来实现,后面三个类就不说了,关于RenderQueueListner类:在每个RenderQueue Group渲染前SceneManager会调用RenderQueueListner对象的renderQueueStarted(...)函数,在Group渲染后调用renderQueueEnded(...)函数,这跟VTree中的回调PreRender()和PostRender()很像。SpriteManager2d就是继承了RenderQueueListner类,将2d的渲染放在了Overlay Group的紧前或随后。
3. 利用Ogre的ManualObject,这个功能相应的wiki:http://www.ogre3d.org/wiki/index.php/ManualObject_2D,这个我还没有看,不过知道这个功能是在预计今年年底发布的1.4版本中会正式提供的,现在要用的话要跟SpriteManager2d那样自己包含一些文件了。
想必最后一个方法会成为Ogre用户的福音。
以上都是个人的看法,如果有什么问题,还希望各位批评指正。