• Ogre参考手册(十) 6 外部纹理源


    6 外部纹理源

    本部分仅提供简单的ExtermalTextureSource和ExtermalTextureSourceManager类的介绍,以及插件工作方式。更多参考ffmpegVideoSystem插件

    什么是外部纹理源

    传统的图片文件如png\bmp\jpeg等Ogre已经做了处理。其它的纹理格式来源,如mpeg\avi\flash、用户自定义格式等Ogre没有解析的内容都可以作为外部纹理源。

    ExternalTextureSource类

    编写外部纹理源插件需要继承ExternalTextureSource类。该类通过StringInterface接口提供了非常有限的功能。最常用的参数可通过类提供的接口或者基类StringInterface接口设置。提供StringInterface接口主要是为了方便在插件继承时增加新的参数类型。

    默认的参数包括:

    filename 插件加载的文件名

    play_mode 播放模式,包括play/loop/pause

    set_T_P_S 设置纹理所在技术、通道、纹理(state),默认”0 0 0”

    frames_per_second 帧数,只能是整数

    基类必须继承的接口包括:

            virtual bool initialise() = 0; //初始化

            virtual void shutDown() = 0;  //销毁

     

    //创建纹理(最主要的接口)

            virtual void createDefinedTexture( const String& sMaterialName,

                const String& groupName = ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME) = 0;

    //销毁纹理

            virtual void destroyAdvancedTexture( const String& sTextureName,

    ExternalTextureSourceManager类

    用于注册和管理已加载的插件,以及辅助通过脚本创建纹理源纹理。同时也是访问纹理源插件的接口

    使用ExternalTextureSourceManager创建纹理的步骤:

    1、注册:通过plugins.cfg加载插件,插件加载时应调用setExternalTextureSource注册自己

    2、创建纹理:

          调用setCurrentPlugin()设置当前使用的纹理插件

          调用getCurrentPluin()->setParameter设置参数

          调用getCurrentPluin()->createDefinedTexure创建纹理

         

    类同时提供destroyAdvancedTexture方法删除纹理,该方法对所有加载的纹理源插件广播纹理名,对应的插件应在ExternalTextureSource::destroyAdvancedTexture接口做清除动作。

    纹理源材质脚本

    material Example/MyVideoExample

    { technique { pass {

            texture_unit{

                     texture_source video //纹理源类型

                     {

                             filename mymovie.mpeg //文件名, 默认参数

                             play_mode play   //播放参数,默认参数

                             sound_mode on //插件扩展参数

                     }

            }

    } } }

    ffmpegVideoSystem插件配置示例,即使用单独的texture_source指定纹理源各参数

    处理流程

     

    ffmpegVideoSystem插件流程示意图,其它插件类似

     附:

    编写外部纹理源插件仅需要继承ExternalTextureSource类,并实现其createDefinedTexture接口。典型情况下,Ogre在解析材质脚本时调用插件的createDefinedTexture接口创建纹理。插件在加载时通过ExternalTextureSourceManager::setExternalTextureSource接口注册

    Ogre不提供刷新等控制,对于ffmpegVide插件或其它类似动态插件,需要插件自己处理刷新,典型的办法是继承FrameListener并加载到OgreRoot监听队列,在frameStarted方法中更新纹理。

  • 相关阅读:
    PCL PointCloud类型介绍
    A+B问题
    高效跑批设计思路——针对系统中的批量、日终任务
    反内耗:停止心理内耗才能变更强
    程序员面试金典 01.01. 判定字符是否唯一
    《同时读写文件 —— 偏移量》
    oracle 11g https://localhost:1158/em 无法访问 & 设置自增id
    https://zhuanlan.zhihu.com/p/422463115语音转换概述及其挑战: 从统计建模到深度学习
    VAD(Voice Activity Detection)算法详解
    通俗理解一个常用的降维算法(tSNE)https://cloud.tencent.com/developer/article/1549992
  • 原文地址:https://www.cnblogs.com/wiki3d/p/4658286.html
Copyright © 2020-2023  润新知