• 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方法中更新纹理。

  • 相关阅读:
    使用 jfinal + beetl + bootstrap 实现商城展示及管理系统
    关于Node.js的__dirname,__filename,process.cwd(),./文件路径的一些坑
    canvas离屏、旋转效果实践——旋转的雪花
    走一步再走一步,揭开co的神秘面纱
    用javascript写一个emoji表情插件
    基于HTML5快速搭建TP-LINK电信拓扑设备面板
    百度地图获取规划路径信息
    devicePixelRatio 那些事儿
    怎样用JavaScript和HTML5 Canvas绘制图表
    首次写iPad布局感想(H5)
  • 原文地址:https://www.cnblogs.com/wiki3d/p/4658286.html
Copyright © 2020-2023  润新知