动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Java教程 ]的信息

本月文章推荐
.回击Ruby, Groovy on&.
.struts构建文件上传(3).
.关于JAVA的字符编码问题.
.关于Servlet.
.基于Binary Heap的A*算法.
.用JavaMail API编写可带附件的邮.
.Java学习:J2ME中的内存泄漏.
.关于J2ME——MIDP1.0中的碰撞检测.
.用JBuilder实现类似VisualStudio.
.Struts网站动态导航系统设计思路.
.EJB 技术简介及其 Java 应用实例.
.利用Myeclipse快速开发struts应用.
.对等计算实践:P2P遇上SSL.
.方案的重复使用.
.让Java程序自带JRE运行.
.Wicket初次接触2之Navomatic.
.观察者模式组图(Observer Patte.
.对等(P2P)计算实际使用之发展历.
.WebLogic Server 国际.
.JBuilder2005 Struts深度体验之升.

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

发表日期:2008-1-5 |



  在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在不同时间截取的两幅截屏,右边截屏是从屏幕后看的效果.
  
 Java 3D的动画展示图(Part1-使用JMF)(图一)


  
图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节点怎样连接在一起)
  
 Java 3D的动画展示图(Part1-使用JMF)(图二)

  
图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给出。类中的公共方法被显示.
  
 Java 3D的动画展示图(Part1-使用JMF)(图三)

  
图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对象进行格式化的情况下是可能的.
  
  JMFMovieScreen使用的ImageComponent2D对象以以下方式声明:
  
  ImageComponent2D ic = new ImageComponent2D(    ImageComponent2D.FORMAT_RGB,    FORMAT_SIZE, FORMAT_SIZE, true, true);
  
  构造器剩余两个需要说明的讨论点是它使用"by reference"和"Y-up"模式.这些模式降低了存储结构图像的内存大小,因为Java 3D避免将图像从应用空间拷贝到图形内存.
  
  在Windows OS环境下,使用OpenGL作为Java 3D优先图像引擎,ImageComponent2D格式应是ImageComponent2D.FORMAT_RGB,BufferedImage格式应是BufferedImage.TYPE_3BYTE_BGR.BufferedImage格式在JMFSnapper中确定.
  
  此项技术的更多细节可以在j3d.org中查询.
  
  将纹理加进区域
  
  通常在一个区域中确定一幅图像的方法是将图像的坐下角连接到区域的左下角,然后逆时针连接剩余的几个角.图4说明这种方法.
  
 Java 3D的动画展示图(Part1-使用JMF)(图四)

  
图4.图像与区域之间的标准连接

  
  图像坐标区间在X Y轴的0 1之间,Y轴正方向.例如,图像左下点坐标为(0,0),右上点为(1,1).
  
  当"Y-up"模式使用,图像坐标Y轴翻转,负方向.意味着(0,0)代表图像左上点,(1,1)指向右下.
  
  当"Y-up"模式建立,图像坐标必须分配给区域中不同点以便获得图像的相同定位.图5显示了最新配置.
  
Java 3D的动画展示图(Part1-使用JMF)(图五)

  
图5."Y-up"模式使用时,图像与区域之间的连接

  
  连接区域点与图像定位的JMFMovieScreen编码是
  
  TexCoord2f q = new TexCoord2f();
  q.set(0.0f, 0.0f);
  plane.setTextureCoordinate(0, 3, q);
  // (0,0) tex coord --> top left quad point (p3)q.set(1.0f, 0.0f);
  plane.setTextureCoordinate(0, 2, q);
  // (1,0) --> top right (p2)q.set(1.0f, 1.0f);
  plane.setTextureCoordinate(0, 1, q);
  // (1,1) --> bottom right (p1)q.set(0.0f, 1.0f);
  plane.setTextureCoordinate(0, 0, q);
  // (0,1) --> bottom left (p0)
  
  PLANE对象指代区域.
  
  更新图像
  
  以上所讲,TimeBehavior是被设置用来被40毫秒调用JMFMovieScreen的nextFrame()方法.nextFrame()调用JMFSnapper对象中的getFrame()方法获得被看作BufferedImage对象的当前动画帧.指派给一个mageComponent2D对象,然后传给区域图像.nextFrame()是:
  
  // globalsprivate Texture2D texture;
  // used by the quadprivate ImageComponent2D ic;
  private JMFSnapper snapper;
  // to take snaps of the movieprivate boolean isStopped = false;
  // is the movie stopped?public void nextFrame(){ if (isStopped)  // movie has been stopped  return;  BufferedImage im = snapper.getFrame();
  // get current frame if (im != null) {
上一篇:JAVA 3D动画展示图(Part2,使用QuickTime) 人气:688
下一篇:Java动画程序的设计原理 人气:712
浏览全部Java的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-10-10 企业网站智能管理系统(TZIMS) v6
2008-10-10 拓文asp.net网站内容管理系统 v6
2008-10-10 动网论坛PHP版 v2.0++ Build 081
2008-10-10 免费时代CMS v5.0
2008-10-10 wodig第四季中文DIGG社区 v4.1 b
2008-10-10 老Y文章管理系统 v2.2 bulid 081
2008-10-10 魔法盒动感相册 ASP+SQL版 v2.0
2008-10-10 Asoft签到管理系统 v3.0 Pack1
2008-10-10 哥特人音乐网潮流留言本 v1.1
2008-10-11 联系人分组工具 v1.1 中文破解版
2008-10-11 FaceMelter变脸 v2.0 汉化破解版
2008-10-11 PathTracker道路跟踪仪 v1.2 破解
2008-10-11 Rooms手机聊天室 v0.6.7 破解版
2008-10-11 RemoteDesktop远程桌面 v1.0 破解
2008-10-11 ProRemote远程调音台 v1.0.1 破解
2008-10-11 PicShare照片共享 v1.0.0 破解版
2008-10-11 Photogene照片编辑器 v1.5 汉化破
2008-10-11 WriteRoom共享文档 v1.0 破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | js/vbs加密 | md5加密 | 进制转换 | UTF-8 转换工具 | Html转换js | Html转换asp | Html转换php | Html转换perl
实用工具:汉字翻译拼音 | 拼音字典 | 符号对照表 | 个税计算 | 实时汇率查询换算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 | 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵
SEO対策 中国語教室 ホームページ作成