思诚科技 seecen LOGO
咨询热线:0791-87557233
  首页 |   Java EE  
关于思诚
关注官方微信

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

来源:网络    更新时间:2014-12-3



  Java3D场景中动画片段的播放为更丰富更生动的3D内容带来了进一步发展的机会。动画可以显示更逼真的背景,例如运动的云彩,繁忙的城市街道,或者窗外的场景等等。动画可以使得帮助信息更生动,也可以用于游戏设计中的场景过渡。

  本文共分为两部分,描述了我是怎样实现一个Java3D动画屏幕的。本部分将解释怎样利用Java媒体框架(JMF)开发本程序的,特别对JMF性能包Windows版本2.1.1e进行了具体的描述。我所用的另外一些工具包括J2SE5.0和Java3D1.3.2。在第二部分中,我将讨论利用QuicktimeforJava技术实现该动画程序的的另外一个版本。

  图1展示了JMFMovie3D应用程序中的两幅屏幕快照,它们是在不同的时刻拍摄的:其中右边的那幅是屏幕从后面看上去的视图。


图1.Movie3D应用程序中的两幅视图
  该应用程序主要包括:

  ·JMF与Java3D的整合。一个应用程序中可以有多个任意大小的屏幕。既然一个屏幕是Java3D的Shape3D类的子集,那么它可以被轻易地整合进不同的场景中。

  ·程序的执行过程采用了"模型-视图-控制器"设计模式。其中,屏幕是视图元素,由JMFMovieScreen类描述。动画是模型部分,由JMFSnapper类所管理。一个Java3DBehavior类TimeBehavior是控制器,由它来控制动画的周期性更新。所有的JMF代码都位于JMFSnapper类中,这使得测试任何变化都更为容易些。在这篇文章的第二部分中,实际上是用了一个称为QTSnapper的QuickTimeforJava版本代替了JMFSnapper。

  ·充分利用了Java3D性能技巧来加速着色过程;结果,动画可以以每秒25帧的速度播放而无任何困难。

  ·最后讨论一下我采用JMF开发时遇到的问题,由于这些问题,我更喜欢的解决方案不能正常工作-JMF的确具有成为一个伟大API的潜力,但在这一伟大的背后还有许多低劣的编码部分有待进一步改进。

  1.我坐在一座高山上

  实际上,我根本没有坐在什么高山上,而是坐在没有自动调温器的寒冷的办公室的一把椅子上。我真正想说的是,这篇文章基于大量的Java3D和JMF的背景知识。

  在本文中,我将解释我用来从影片中提取动画帧的JMF技术,而不去讨论诸如流媒体,捕获或者代码转换等技术。

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

  动画由JMFSnapper类负责装载和播放,且动画播放循环进行,直到发命令让其停止。

  动画屏幕由JMFMovieScreen创建,它负责管理一个放在跳棋盘地板上的Java3D四边形。

  想直观观察一下这些类吗?请看下图中的应用程序场景图(该场景图展示了在一个场景中的Java3D结点是怎样被链接到一起的)。


图2.Movie3D场景图
  图2的许多细节被忽略掉了,但是这幅图与KGPJ中第15章的示例Checkers3D有着惊人的相似。只有动画相关的结点是新东西。
由于JMFMovieScreen和TimeBehavior对象都是场景图中的结点,所以它们都以三角形方式显示。JMFSnapper对象不是图中的一部分,但是被JMFMovieScreen所调用。

  每隔40毫秒,TimeBehavior对象调用一次JMFMovieScreen的nextFrame()方法,而nextFrame()又依次调用JMFSnapper的getFrame()方法来检索正播放动画中的当前帧,该帧然后被放置到由JMFMovieScreen管理的四边形上。

  TimeBehavior是Java3D的Behavior类的子类化,是一个定时器的Java3D实现方式。它与KGPJ中第18章的3D精灵示例中的TimeBehavior类很相似。

  洞察该应用程序实现的另一方法是看一下图3中描述的UML类图,其中仅显示了类的公共方法。


图3.Movie3D类图

  • 上一篇文章:

  • 下一篇文章:
  •  

    0791-87557233

    重视每个来电 珍惜您的时间
    思诚者开发沙龙
    江西思诚科技有限公司  赣ICP备17006097号  CopyRight©2014 - 2018