Ogre 2D与合成技术详解
1. 2D在3D API中的意义
在3D API编程指南中讨论二维图形看似有些奇怪,但实际上很多事情在2D中处理会更好或更简单。例如,图形用户界面(GUI)若以二维屏幕呈现,应用程序处理起来更简单,用户理解也更直观。游戏或训练模拟中的应用反馈机制(如平视显示器,即HUD)通常以二维“覆盖层”的形式呈现到3D场景中效果最佳。虽然可以设计全3D用户界面,但即使如此,3D应用中仍有二维框架的用武之地。
2. Ogre中的2D
2.1 覆盖层渲染队列
Ogre中的2D通常存在于“覆盖层”渲染队列中。该队列并无特别之处,只是在其中渲染的所有内容会自动在其他内容之后渲染(即“位于”3D场景之上)。也可以在覆盖层队列中渲染3D对象,比如游戏HUD中目标对象的旋转渲染。
2.2 覆盖层
覆盖层是一个笼统的术语,意思就是它字面所表达的:覆盖层“覆盖”场景中的其他所有内容,如图中左下角的统计窗口和右下角的Ogre标志。统计窗口绘制时有一定透明度,仔细观察可以看到Ogre头部透过统计窗口背景显示出来。
2.3 覆盖层对象类型
Ogre中的覆盖层主要分为两类:
- 受Ogre框架支持的(托管) :可以完全用脚本编写,常用于简单的文本输出或显示。
- 不受支持的(非托管) :涵盖应用程序可能具有的任何类型的GUI或通用UI功能(如游戏中的HUD、UI菜单等)。实际上,非托管覆盖层元素只是在覆盖层渲染队列中渲染的带纹理和着色的四边形,如何绘制、着色和添加纹理完全由开发者