欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Ogre overlay实现帧动画

程序员文章站 2022-03-16 21:33:59
...

ogre Dome上有动态纹理的效果演示,这里讲的不是移动或旋转纹理坐标产生的纹理动态效果,而是由几张图片更换显示产生的动画效果,这种效果在2d中指的是帧动画。首先要准备好一组图片,如animotion1.jpg, animotion2.jpg, animotion3.jpg, animotion4.jpg. ogre的材质的Texture-Uint中有anim_texture这个属性(可以参考ogre中文帮助手册),它是专门为作帧动画准备的。接着定义一个简单的overlay, 以下是我的简单定义:

howlet/BigMapOverlay
{
    zorder 0
    container Panel (bigMap)
       {
           horz_align left
           vert_align top
           metrics_mode relative
           left 0
           top 0
           width 1
           height 1
 
    element Panel (BigMap/Player)
           {
               horz_align left
               vert_align top
               metrics_mode pixels 
               left 0
               top  0
               width 20
               height 20
 
               material BigMap/Player
 }

 

material BigMap/Player的定义:

material BigMap/Player
{
    technique
    {
       pass
       {
         alpha_rejection greater 128 
         scene_blend alpha_blend
 
           texture_unit        //人物方向图标
           {
               tex_address_mode clamp
           }
       }
    }
}

 

然后我们通过TextureUnitState* pTexUint = OverlayManager::getSingleton().getOverlayElement(“BigMap/Player”)->getMaterial()->getTechnique(0)->getPass(0)->getTextureUnitState(0);就可以得到当前的texture_unit 也就是material BigMap/Player中的纹理。

接下来定义图片数组名:const Ogre::String animotion[4] = {"animotion1.jpg", "animotion2.jpg", "animotion3.jpg", "animotion4.jpg"}; 注意这4张代表的是不同的图片名字。

最后通过TextureUnitState::setAnimatedTextureName(const String* const names, unsigned int numFrames, Real duration = 0)可以直接设置动画。在我们这里是pTexUint->setAnimatedTextureName(animotion, 4, 4*0.1);就这样,简单得实现了动画效果。

setAnimatedTextureName这个函数可以参考官方说明。

相关标签: Ogre 帧动画