1.Displaying 2D
在Ogre中创建Displaying 2D还是很简单的:
1# 创建一个2D长方形:
Rectangle2D *rect = new Rectangle2D(true);(true表示使用纹理)
2# 设置长方形大小:
rect->setCorners(-0.5f,0.5f,0.5f,-0.5f); //这用的是笛卡尔坐标系,原点在窗口的中心,X轴的正半轴在右边(最右边大小为1,最左边就为-1),Y轴的正半轴在上边(最上边为1,最下边就为-1),这个和VC中的窗口默认坐标系有点不一样。
3# 设置材质、渲染队列等:
rect->setMaterial("Material/Background");
rect->setRenderQueueGroup(Ogre::RENDER_QUEUE_OVERLAY);(这里设的OVERLAY层,当然你可以设为BACKGROUD等其它层)
4# 这里需要创建一个包围盒:
AxisAlignedBox *aabb = new AxisAlignedBox();
aabb->setInfinite();( Ogre是一个3D引擎,它会把2D物体当作在3D空间里对待。这意味着,如果我们创建这个物体,并把它绑在场景节点上,当我们远一点观看时会消失。为了修正这个问题,我们将把这个物体的包围盒设置成无限大,这样摄像机就永远在它里面 )
5# 将二者联合起来,并绑定在一个节点上:
rect->setBoundingBox(*aabb);
SceneNode* backNode=curr->getRootSceneNode()->createChildSceneNode("BackgroundNode");
backNode->attachObject(rect);
Displaying 2D没有脚本支持,这一点就没有“Overlay”用起方便了。而且在Displaying 2D也不能支持旋转等操作,如要进行旋转,就只能旋转纹理。
使用Rectangle2D的显示效果:
2. Overlay
(1)在*.overlay文件中添加配置
首先要对Overlay脚本的概念和配置参数有些了解,可以参看 OGRE 手册 版本v1.4.0('Eihort') 中的“3脚本-1-4-0:3.4”这一节。然后要在某个*. Overlay文件中增加Panel,并指定一些参数,我自己是修改了Media\packs\OgreCore.zip中的OgreDebugPanel.overlay,具体修改如下图所示:
(2) 增加代码,显示2D图片。
首先得到Overlay指针:
// ExampleFrameListener构造函数里一般有这句,"Core/DebugOverlay"在OgreDebugPanel.overlay里
Overlay* DebugOverlay = OverlayManager::getSingleton().getByName("Core/DebugOverlay")
然后在ExampleFrameListener::updateStats(void)中写以下两行代码即可:
OverlayElement* guiSprite= OverlayManager::getSingleton().getOverlayElement("Core/Sprite");
dynamic_cast<Ogre::PanelOverlayElement*>(guiSprite)->setUV(0.0, 0.0, 0.5, 1.0);
如果想产生动画效果,只需要把纹理坐标设为变量,然后相应地修改纹理坐标就可以了。