现在的位置: 首页 > 综合 > 正文

Ogre中显示2D

2018年01月16日 ⁄ 综合 ⁄ 共 1503字 ⁄ 字号 评论关闭

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

 如果想产生动画效果,只需要把纹理坐标设为变量,然后相应地修改纹理坐标就可以了。

 

抱歉!评论已关闭.