转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> JAVA开发 >> 正文
利用Java 3D技术播放动画之QTJ技术         ★★★★

利用Java 3D技术播放动画之QTJ技术

作者:闵涛 文章来源:闵涛的学习笔记 点击数:877 更新时间:2009/4/22 23:29:38
天极软件专题专区精选 Google专区 POPO专区 QQ专区 Flash MX 视频教程 Photoshop视频教程 网页设计视频教程 PowerPoint动画演示教程 Excel动画教程集 Word动画演示教程 特洛伊木马专区 黑客知识教程专区 注册表应用专区 Windows API开发专区 网络编程专区 VB数据库编程专区
  在第一部分内容中,我描述了怎样借助Java 媒体框架(JMF)的帮助实现在一个Java 3D场景中播放动画片断。其实现主要使用了模型-视图-控制器设计模式:

  · 动画屏幕是视图元素,由JMFMovieScreen类描述。

  · 动画是模型部分,由JMFSnapper类所管理。

  · 一个Java 3D Behavior类TimeBehavior是控制器,由它完成从动画中的周期性帧检索,然后在屏幕上画出。

  在这篇文章中,我将revisit该动画组件,用 QuickTime for Java (QTJ)来重新实现之。QTJ在QuickTime API之上提供了一个面向对象的Java 层,使之有可能实现播放,编辑和创建QuickTime 动画;捕获音频与视频;执行2D和3D动画。QuickTime在Mac 和Windows上平台都可以使用。关于QTJ的安装,文档和举例的细节信息请参见developer.apple.com/quicktime/qtjava。

  由QTJ 来取代JMF 设计模式的结果对应用程序影响很小-只有动画类JMFSnapper分离出来,由QuickTime for Java版本的QTSnapper所代替。

  图 1展示了QTJ 版本的Movie3D应用程序中的两幅屏幕快照,其中右边的那幅是屏幕从后面看上去的视图。


图 1.QTJ Movie3D应用程序中的两幅视图
  如果快点回顾一下第一部分中的图1,你会发现基于QTJ的应用程序和JMF 版本的实现没有太明显的区别。

  但是,如果细致比较一下这两处执行程序会发现有两个变化:QTJ版本的动画像素化pixelation 更明显,且播放速度更慢些。像素化的出现是由于原始的动画被从MPEG 格式翻译成QuickTime的MOV格式所致,可以借助于一个更好的转换工具来实现修补。速度问题更为根本性:它与QTSnapper的基本实现有关。

  该文中主要涉及到:

  ·讨论QTSnapper实现中的两种主要方法。一种方法是把动画的每一帧都着色到屏幕上去,另一种方法是基于当前时间选择一帧。 后一种方法意味着,可以跳过一些帧,使得动画颤动一点,但是却使动画播放速度加快。

  ·介绍几种简单的帧/秒(FPS)计算方法,我将用之来判断不同实现方式的相对速度的不同,并用来检测跳过的帧。

  我不会再细致地介绍动画屏幕和动画更新行为,因为这些与第一部分中是一致的。

  下面我将详细介绍的是我应用在QTSnapper中的用于从动画中提取帧的QTJ技术。

  1. 程序实现中的两幅轮廓图

  下面的图2描述了该应用程序中的场景图。


图 2. Movie3D场景图
  该图几乎和第一部分中的一模一样。

  QuickTime动画由QTSnapper类负责装载。动画屏幕由QTMovieScreen创建,它管理一个放置在跳棋盘地板上的Java 3D四边形。每隔40毫秒,TimeBehavior 对象调用QTMovieScreen中的nextFrame()方法一次,该方法调用中QTSnapper 的getFrame()方法来取得动画中的一帧,该帧最后被放置到由QTMovieScreen管理的四边形上。

  JMFSnapper和QTSnapper之间有一个重要的不同。JMFSnapper返回当前正播放动画的当前帧,而QTSnapper依赖于一个递增的索引值返回动画中的当前帧。

  例如,当getFrame()在JMFSnapper中被反复调用时,它可以检索帧1,3,6,9,11,等等,具体依赖于调用的方法和动画的播放速度。当在QTSnapper中调用getFrame()时,它将返回帧1,2,3,4,等等。

  下面的图3描述了该应用程序的UML类图,其中仅显示了类的公共方法。


图 3. Movie3D类图
  除了动画屏幕QTMovieScreen类和动画QTSnapper类名字的区别外,这里的应用程序类继承图与第一部分中的没有区别。事实上,只有Snapper类的内部实现变更了一些。

  把应用程序从JMF Movie3D版本迁移到QTJ版本要求代替Snapper类。另外,还需要把动画屏幕类中的两行代码改变一下,其中声明了Snapper 类并被实例化:

//全局变量定义
private QTSnapper snapper; //以前是JMFSnapper
//在构造器中以fnm方式装入动画
snapper = new QTSnapper(fnm);
  这两处变化是把JMFMovieScreen 改名为QTMovieScreen的唯一原因。

  所有该示例的代码以及本文的一个早期版本,都能在KGPJ website处找到。

  2. 一部帧到帧Frame-By-Frame 的动画

  理解了QTSnapper的内部工作机理,有助于对QuickTime动画的结构有一个基本了解。每个动画可能由多个音频和视频轨道合成,而在时间上相重叠。下图4展示了这种基本思想。


图 4.一个QuickTime动画的内部结构
  每个轨道管理自己的数据,如它包含的媒体的类型和媒体本身。该媒体容器具有它自己的数据结构,包括持续时间和播放速率(也就是,每秒要显示多少个样本)。这里的媒体实际上是一系列的样本(或者帧),第一个样本从时间0开始(with respect to media time)。样本被索引化了,如第一个样本在位置1处(而不是0)。

  简化后的QuickTime轨道和媒体结构如下图5所示。


图 5. 一个QuickTime轨道和媒体的内部结构
  要想更全面的了解,请参考QuickTime教程的动画部分。

共2页。 1 2 8 :


[JAVA开发]利用Java Swing 实现游戏开发  [JAVA开发]利用Java Servlets 2.4实现过滤
[JAVA开发]利用Java 3D技术播放动画之JMF技术  [JAVA开发]利用Java Applet播放声音文件
[JAVA开发]利用Java Applet编程实现动画特技  [JAVA开发]利用Java Swing设计通用对话框
[JAVA开发]利用Java Swing设计标准对话框  
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台