• 欢迎来到论文发表网(www.lunwenchina.cn),我们为您提供专业的论文发表咨询和论文发表辅导!
受“清朗”行动影响,原网站QQ被封,新老作者请联系通过新的QQ:189308598。或者电话微信:15295038855

你的位置:论文发表网 >> 论文库 >> 计算机论文 >> 计算机应用 >> 详细内容 在线投稿

基于幻世(OurDream)2D 图形引擎的媒体播放设计方法

热度0票  浏览113次 时间:2018年7月24日 09:37
  摘要:常用的媒体播放器是在 Windows 操作系统平台下,利用 ActiveX 技术,以 Windows Media Player 的 OCX 组件为基础来设计的,这样做的好处是最大化利用成熟的技术和现成的设计,且同时保证基本的设计质量。文章介绍了另一种相比较之下同样简单高效的媒体播放设计方法:基于幻世(OurDream)2D 图形引擎的媒体播放设计方法。
  关键词:媒体播放器;图形引擎;幻世 2D
  中图分类号:TP391.41 文献标识码:A 文章编号:1673-1131(2015)10-0128-02.
  1 什么是幻世
  幻世(OurDream)是一款轻量级的,基于 DirectX 与OpenGL 的 2D 图形引擎,是专为高速高效绘图而专门设计的,引擎能够充分地利用目标计算机的硬件平台能力,高速完成超大量图形画面的绘制和输出工作。鉴于目前高清媒体的泛滥,这样的能力使得幻世引擎尤其适合用来播放这些高清的多媒体文件,同时简单易用的设计,也使得利用引擎的功能非常简便,这也是许多开发者选择它来完成播放器设计的主要原因。
  2 设计播放器
  如何设计一个基于幻世引擎的播放器?这里是使用 C++作为设计的语言,使用 Virtual C++ 2010 作为开发工具,幻世引擎 SDK 则是使用目前最新的版本。在设计之前,假定读者熟悉 C++程序设计,并且已经成功完成了开发环境的搭建,能够直接开始幻世程序的设计。
  3 设计过程
  首先,我们搭建一个幻世引擎的框架,为后面的设计工作做好准备。这个框架程序能够运行,但是只能在屏幕上绘出黑色的背景。使用幻世引擎之前,需要编写引擎的初始化代码,这样才能够让我们自己的程序利用上引擎提供的功能。该过程很简单,只需要先创建一个引擎实例,然后使用其提供的初始化函数就可以进行初始化。(如下所示)engine=Create3D(OURDREAM2D_VERSION);
  if (engine= =NULL)
  {
  MessageBox(0, “Create Engine Fail !”,”ERROR”,MB_OK);return -1;
  } C
  reate3D 函数便是用来创建引擎实例的函数,它需要一个 参 数 用以 标 明 使 用的 引 擎 版本,直接 使 用 宏 OURDREAM2D_VERSION 即可。
  在引擎实例创建成功后,我们通过调用引擎的Initialize函数执行引擎的初始化工作。该函数需要提供一个SOD2DSystemSetup 的数据结构用于告知引擎按照何种要求来进行初始化。该数据结构的具体定义如下(如下所示):
  //系统设置信息结构
  Struct SOD2DSystemSetup EOD2DVideoType m_eRenderType;HWND m_hWindowID;bool m_bUseZBuffer;
  bool m_bWindowed;
  bool m_bUseStencilBuffer;
  bool m_bHideMouse;
  bool m_bUseHighPrecisionFPU;
  bool m_bUseVsync;
  bool m_bUseLog;
  int m_iScreenWidth;
  int m_iScreenHeight;
  int m_iColorMode;
  int m_iTextureFilter;
  int m_iAntialias;
  int m_iFixFPS;
  char m_szIcon[MAX_PATH];
  char m_szTitle[256];
  char m_szLog[MAX_PATH];
  }
  解释:
  (1)指定渲染器的类型,需要提供一个 EOD2DVideoType的值。
  (2)指定幻世引擎将图像输出到的窗口的句柄,可以取 0值,表示用户程序不提供窗口以供输出,引擎会自行创建一个窗口来完成图像的输出。如果指定有效的窗口句柄,则引擎会将画面输出到该窗口上。
  (3)指定是否使用 Z 缓冲,对于 2D 图形取 false 值即可。
  (4)指定是否使用窗口模式,如为 false,那么以全屏方式运行。
  (5)指定是否使用模板缓存,取 false 值即可。
  (6)指定是否隐藏系统的鼠标指针,隐藏后,可自行创建或者绘制鼠标指针。
  (7)指定是否启用高精度浮点运算。
  (8)指定是否启用垂直同步,可以让引擎更新屏幕图像的速度与显示器的刷新速度同步。
  (9)指定是否启用日志记录,可以让幻世引擎将运行过程中的事件写到文本文件中,这样便于开发这了解运行中的问题,方便排查错误。 (10)绘图窗口的宽度(分辨率),该值在窗口模式下表示绘图窗口的宽度,在全屏模式下表示横向分辨率。
  (11)绘图窗口的高度(分辨率),该值在窗口模式下表示绘图窗口的高度,在全屏模式下表示纵向分辨率。
  (12)指定绘图时颜色深度,只能取值 16 与 32,16 即代表 16 位色,32 代表 32 位色,取其他值会导致引擎初始化失败。
  (13)指定纹理过滤方式,取值范围-1~8,其中-1 为关闭纹理过滤,0 为启用三线性过滤,1~8 为启用各向异性过滤。
  (14)指定图像抗锯齿强度,取值范围 0~4,0 为关闭抗锯齿。
  (15)指定最大 FPS(帧速率),指定该值后,引擎的帧速率将会被限制在此值以下。
  (16)指定绘图窗口的图标文件位置,如果不需要使用,可以直接置为 NULL。
  (17)指定绘图窗口的文字标题,可以置为 NULL 即使用默认的窗口标题。
  (18)指定日志文件保存的位置,可以置为 NULL,如果该值置为 NULL,则第 9 项即使为 true 也无效。
  接下来,就是完成引擎渲染器接口的获取,这是图像输出的关键,也是后面获得引擎多媒体接口用于播放媒体文件的前提。下面是获取渲染器接口的方法(如下所示):
  IRenderSystem*Render=NULL;
  render=engine->GetRender();
  if (render= =NULL)
  { M
  essageBox(0,”Get Render Fail!”,’’ERROR”,MB_OK);engine->SystemStop();return -1;
  } 完
  成了渲染器的获取,下面就可以得到 IMediaSystem 多媒体系统接口了,这是完成播放器功能的主要部分。同样是简单地向幻世引擎主接口申请即可获得(这里需要声明一个IMediaSystem 的接口变量用来接收获得的接口指针,此处省略了没有展示出来)。如下所示:
  media=engine->GetMediaSystem();
  if (media= =NULL)
  {
  MessageBox(0,”Get MediaSystem Fail !”,”ERROR”,MB_OK);engine->SystemStop();
  return -1;
  }
  接下来就是使用接口提供的 AddMedia 函数来加载需要使用的媒体文件了。(如下所示):
  SOD2DFloatRect position;
  //载入媒体文件
  position.Init(15,15,815,615);
  WCHAR wmediapath[MAX_PATH];
  MultiByteToWideChar (CP_ACP, 0,”big_buck_bunny_1080p_stereo.avi”,-1,Wmediapath,MAX_PATH);
  Media->AddMedia(100,wmediapath,position);4 定义循环函数在接口已经获得,播放文件加载后,仍旧不能正常运行的原因在于还有两个重要的参数没有提交给引擎,那就是“帧处理函数”和“帧渲染函数”。
  “帧处理函数”就是用来执行播放控制的控制函数,因此在这个函数里面我们将媒体播放过程中的控制功能加入到里面(如下所示):
  bool FrameFun(void)
  {
  Media->OnEvent();
  return true;
  } “
  帧渲染函数”就是用于图像输出的渲染器渲染函数如下所示):
  bool RenderFun(void)
  {
  render->Clear(ARGB(255,0,0,0));
  render->BeginScene();
  render->EndScene();
  return true;
  }
  完成后使用引擎的相关函数提交给系统就可以了(如下所示):
  engine->SetFrameFunction(FrameFun);
  engine->SetRenderFunction(RenderFun)
  5 进入工作循环
  让引擎开始执行循环的帧处理和帧渲染,实现引擎画面动态的变化(如下所示)。
  engine->SystemRun()
  6 卸载及清理
  卸载操作能用来归还引擎运行期间所占用的资源,清理所有使用过的资源,如果不进行此操作,可能会导致系统出现内存或资源泄露,对操作系统可能会造成不良影响(如下所示):
  media->Release();
  render->Release();
  engine->SystemStop()
  7 编译生成
  全部的代码编写完成后,就进行编译和运行。
  8 结语
  以上就是关于利用幻世 2D 图形引擎来设计媒体播放器的流程。由于它设计的简易性,使得在同类播放器中的使用也更加便捷。且因为是 2D 图形引擎,在对于图形图像的处理方面更加清晰流畅。希望这个设计能够给予同样爱好计算机设计的朋友有所帮助。



中国论文网(www.lunwenchina.cn),是一个专门从事期刊推广、论文发表、论文写作指导的机构。本站提供一体化论文发表解决方案:省级论文/国家级论文/核心论文/CN论文。

投稿邮箱:lunwenchina@126.com

在线咨询:189308598(QQ) 

联系电话:15295038855(徐编辑)  

 

上一篇 下一篇
0

联系我们