科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件Java 3D的动画展示图(Part1-使用JMF)

Java 3D的动画展示图(Part1-使用JMF)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

  在Java 3D场景中插入动画片段使3D内容更加有趣充实.一段动画可以在更令人信服的背景下展示,例如飘动的云,繁忙的城市街道,或者是从窗向外看的效果.动画可以在屏幕效果和游戏效果之间任意转换.

作者:builder.com.cn 2007年8月24日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
  由于节点关系,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轴正方向,可以在底版的任何位置被定位.
  
  四方形外观是双面,允许从前或后观看动画.结构是用双线性插值,可以降低动画图像的像素化.
  
  大多数的功能是从KGPJ24章中的FPS(first-person shooter)实例中的ImageCsSeries类拷贝而来. ImageCsSeries在一个区域中显示一系列的GIF图片. 为了简短起见,我仅描述了JMFMovieScreen与ImageCsSeries的不同特征.
  
  高效显示图像
  
  动画中的一个帧被转换结构扩大四倍;分为两个步骤:第一步 提供的BufferedImage传给Java 3D的ImageComponent2D对象,然后传给Java 3D Texture2D.
  
  区域的图像更新非常快:每秒更新25帧,要求结构更新25次.因此结构有效率的更新非常的重要.这种高效率在利用BufferedImage和ImageComponent2D对象进行格式化的情况下是可能的.
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章