岁月联盟 · 中国技术网 本站主页 | 安全认证 | 用户服务 | 技术论坛
新闻快报 | 新手学堂 | 黑客特区 | 程序语言 | 数 据 库 | 防 火 墙 | 路由交换 | 系统集成 | 服 务 器 | 存储备份 | 考试认证
Windows | Linux | Java | 协议分析 | 问题解答 | 进程大全 | 网页设计 | 多 媒 体 | 图库资料 | 软件下载 | 站内下载
  您现在的位置: 岁月联盟 >> Java >> 核心技术 >> JavaMedia >> Java正文
Java 3D的动画展示图(Part1-使用JMF)
作者:未知 文章来源:本站整理 点击数: 更新时间:2007-7-22 17:29:54

  在Java 3D场景中插入动画片段使3D内容更加有趣充实.一段动画可以在更令人信服的背景下展示,例如飘动的云,繁忙的城市街道,或者是从窗向外看的效果.动画可以在屏幕效果和游戏效果之间任意转换.
  
  这篇文章被分为两个部分,描写我怎样实现一个Java 3D动画屏幕效果.在这个部分,我将说明我怎样利用JMF(Java Media Framework),特别是在JMF Performance Pack for Windows v.2.1.1e情况下.我的另外两个工具是J2SE 5.0和Java 3D 1.3.2.我将讨论另外的使用Quicktime for Java的动画屏幕版本.
  
  图1是应用JMF Movie3D在不同时间截取的两幅截屏,右边截屏是从屏幕后看的效果.
  
 

  
图1. Movie3D应用截屏

  
  此应用程序中重点:
  
  。JMF和Java 3D的集成.屏幕以任意尺寸成倍增加在一个应用程序.由于屏幕是Java3D的Shape3D类的一个子类,因此它可以很容易的统一到各种Java 3D场景中.
  
  。程序执行使用Model-View-Controller设计模式.屏幕是一个视频元素,由JMFMovieScreen类描述.动画是一个由JMFSnapper类控制的模型部分.一个Java 3D Behavior类,TimeBehavior,控制动画定时定期更新.所有JMF编码都存放在JMFSnapper类,可以很方便的测试各种变化.这篇文章的第二部分JMFSnapper由QuickTime for Java版本中的QTSnapper取代.
  
  。Java 3D 的使用将会使动画的播放速度毫无困难的上升到25帧/秒.
  
  。使用JMF出现问题的讨论.问题是我首选解决方案将不会工作-JMF有可能变为一个巨大的API,但在其内部仍有一些程序没有及时运行.
  
  1. 我坐在山上
  
  事实上,我正坐在一个冰冷的办公室.我真正的意思是说这篇文章建立在大量Java 3D和JMF背景知识之上.
  
  我将不会细致地解释Java 3D的基础知识,因为它们都可以在O'Reilly文章Killer Game Programming in Java(以下简称KGPJ)中找到.例如,图1场景效果图是其第15章中的轻微改良Checkers3D的版本实例.我再生了这些编码以生成底版,蓝天和灯光.
  
  假如你不想买这本书,没关系,所有篇章的初稿和所有编码都可以在此书的站点查阅.
  
  在此文章中,我将会解释我用来从动画中抽取帧的JMF技术.我将不会讨论流媒体或者编码转换.
  
  2. 应用简述
  
  动画由JMFSnapper类加载播放,并且不断的循环播放直到被停止.
  
  JMFMovieScreen生成动画屏幕,并在底版上控制Java 3D四边形.
  
  图2显示这些类的应用(该场景图说明场景中Java 3D节点怎样连接在一起)
  
 

  
图2:Movie3D场景图

  
  图2种的很多细节可以被忽略,此图KGPJ15章中的得Checkers3D实例有很多相似之处. 只有特殊动画的节点是新的.
  
  由于节点关系,JMFMovieScreen和TimeBehavior对象以三角形表示.JMFSnapper对象不属于这张图,但由JMFMovieScreen调用.
  
  每40毫秒,TimeBehavior对象调用JMFMovieScreen类中的nextFrame()方法.接下来调用JMFSnapper中的getFrame()方法获取动画中当前播放的帧,由JMFMovieScreen控制成像.
  
  TimeBehavior是Java 3D的Behavior类的子类,它是Java 3D应用的计时器.它与KGPJ18章中的3D sprites实例中的TimeBehavior类十分相似.
  
  观察应用过程的另一种方式就是察看它的UML类图表,图3给出。类中的公共方法被显示.
  
 

  
图3:Movie3D类图表

  
  Movie3D的子类JFrame,WrapMovie3D是JPanel的一个子类.图2展示了WrapMovie3D如何构建场景图,和将其译成应用的JPanel.他使用CheckerFloor 和ColouredTiles类构建底版.
  
  JMFMovieScreen创建动画屏幕,将其加入场景中,通过创建一个JMFSnapper对象开始动画.TimeBehavior每40毫秒调用JMFMovieScreen中的nextFrame()方法. nextFrame()调用JMFSnapper中的getFrame()得到当前帧.
  
  这个例子中的所有编码,此文章的早期版本可以在KGPJ网点查询.
  
  3. 准备动画
  
  动画,它的屏幕和更新屏幕的TimeBehavior对象,都是由WrapMovie3D中的addMovieScreen()方法创立.
  
  // globalsprivate BranchGroup sceneBG;private JMFMovieScreen ms;
  // the movie screenprivate TimeBehavior timer;
  // to update screenprivate void addMovieScreen(String fnm){ // put the movie in fnm onto a movie screen ms = new JMFMovieScreen(      new Point3f(1.5f, 0, -1), 2.0f, fnm);
  sceneBG.addChild(ms);
  // set up the timer for animating the movie timer = new TimeBehavior(40, ms);
  // update movie every 40ms (== 25 frames/sec) timer.setSchedulingBounds(bounds);
  sceneBG.addChild(timer);}
  
  两个Java 3D addChild()方法调用JMFMovieScreen和TimeBehavior节点间的连接.setSchedulingBounds()激活TimeBehavior节点.
  
  4. 创建动画屏幕
  
  JMFMovieScreen是Java 3D的Shape3D类的一个子类.所以必须仔细说明它的外形的几何形状和外观.
  
  几何形状是指动画图像的四个边尺寸上成比例,它的最大尺寸(高 宽)必须向构造器仔细说明.这个四方形是垂直的,朝向Z轴正方向,可以在底版的任何位置被定位.
  
  四方形外观是双面,允许从前或后观看动画.结构是用双线性插值,可以降低动画图像的像素化.
 

[1] [2] 下一页


  • 上一个Java:
  • 下一个Java:
  •  
    热门文章
    推荐文章
    关于我们 | 发展历程 | 网站地图 | 广告服务 | 招贤纳士 | 战略合作 | 友情链接 | 著作声明 | 联系我们
    Copyright © 2002-2007 SYUE All rights reserved.
    E_mail:WebSyue@163.Com 皖ICP备05004589号
    未经授权禁止转载、摘编、复制或建立镜像.如有违反,追究法律责任.
    魔域私服 魔域私服 传奇世界私服 345天龙发布网 传奇世界私服 传奇世界私服 新开传世私服 完美世界私服 征途私服 bet365 征途私服 劲舞团私服 征途私服发布网 传世私服 传奇世界私服