⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 利用java 3d技术播放动画之jmf技术 - 网易学院·教程.txt

📁 以上代码设置不了系统时间的原因:因为date并非是一个实际进程..所以Process没办法返回。。 如果真要那种设的话。你需要建一个文件。。用文件来设时间。。因为文件是一个真正的进程
💻 TXT
字号:
利用Java 3D技术播放动画之JMF技术 - 网易学院·教程通行证:用户名  密码   首页 - 新闻 - 免费邮箱 - 短信 - POPO - 
      相册 - 搜索 - 交友 - 拍卖

      新闻 | 体育 | 财经 | 娱乐 | 商业 | 科技 | 汽车 | 数码 | 女人 | 旅游 | 教育 | 文化 | 广州 | 军事 | 部落
      评论 | NBA | 明星 | 证券 | 基金 | 探索 | 房产 | 手机 | 两性 | 健康 | 培训 | 电影 | 游戏 | 拍卖 | 论坛
      科技首页重磅报道专题IT茶馆技术趋势科学学院游戏病毒下载论坛

  首页 工具软件 办公软件操作系统 图形图像网站建设 编程开发多媒体 网络 安全 病毒 专题 视频中心 艺术设计教授视点 软件新闻 病毒安全新闻 论坛 
  滚动更新 视觉玩家征稿 热门搜索关键字:      WEB  学院    
你现在的位置是: 网易 > 网易科技 > 网易学院·教程 利用Java 3D技术播放动画之JMF技术
http://tech.163.com/school · 2005-10-17 19:04:31 · 来源: 天极网 第1页:利用Java 
  3D技术播放动画之JMF技术 第2页:利用Java 3D技术播放动画之JMF技术 第3页:利用Java 3D技术播放动画之JMF技术 
 把纹理链接到四边形上

  把纹理图像平铺到一个四边形上的常用方法是,把纹理的左下角链接到四边形的左下角,并以反时针方向指定其它链接。这种方法显示在图4中。



图 4.纹理与四边形间的标准链接

  纹理坐标的范围是0-1,沿着x轴和y轴,且y轴方向向上。例如,纹理左下角使用坐标(0,0),则右上角为(1,1)。

  当使用"Y-up"方式时,y轴的纹理坐标是颠倒的,即指向下方。这就是说,坐标(0,0)对应纹理的左上角,而(1,1)对应纹理的右下角。

  在使用"Y-up"方式情况下,纹理坐标一定要赋给四边形的不同点以取得图像的相同的方向。这种新的配置显示在图5中。



图 5. 当使用"Y-up"方式时的纹理与四边形的链接
 
  在JMFMovieScreen中,实现把四边形顶点与纹理坐标相链接的代码如下:


TexCoord2f q = new TexCoord2f();

q.set(0.0f, 0.0f); 
plane.setTextureCoordinate(0, 3, q); 
//纹理坐标(0,0)-->四边形左上点(p3)
q.set(1.0f, 0.0f); 
plane.setTextureCoordinate(0, 2, q); 
// (1,0) -->右上(p2)

q.set(1.0f, 1.0f); 
plane.setTextureCoordinate(0, 1, q); 
// (1,1) -->右下(p1)

q.set(0.0f, 1.0f); 
plane.setTextureCoordinate(0, 0, q); 
// (0,1) -->左下(p0)

  这里的平面对象代表了四边形。

  更新图像

  前面已经提到,一个TimeBehavior对象被建立以每隔40毫秒调用一次JMFMovieScreen的nextFrame()方法。而nextFrame()又调用JMFSnapper对象的getFrame()方法来以一个BufferedImage对象方式检索当前动画帧。该BufferedImage对象被指派给ImageComponent2D对象,然后用于四边形的材质。nextFrame()的代码如下所示:


//全局变量
private Texture2D texture; //由四边形使用
private ImageComponent2D ic;

private JMFSnapper snapper; 
//快照该动画
private boolean isStopped = false; 
//动画停止了吗?

public void nextFrame()
{ 
 if (isStopped) //动画已经停止
  return;

 BufferedImage im = snapper.getFrame(); 
 //获取当前帧
 if (im != null) {
  ic.set(im); //把该帧指派给ImageComponent2D
  texture.setImage(0,ic); 
  //使成为该形状的材质
 }
 else
  System.out.println("Null BufferedImage");
}

  JMFSnapper对象snapper是在JMFMovieScreen的构造器中创建的:


//装载并播放动画
snapper = new JMFSnapper(movieFnm);

  JMFSnapper中的简单接口隐藏了用于播放动画和从动画中提取帧的JMF代码的复杂性。在本文的第二部分里,JMFSnapper类为一个使用QuickTime 
for Java的版本所取代,且JMFMovieScreen类也作了最少的修改。

  5.管理动画

  JMF为存取特定的动画帧提供了一种高级存取方式。下面的代码片断显示了该高级方式的主要组成,我略去了其中有关错误检测及异常处理的部分。


//在realized状态下,创建一个动画播放器
URL url = new URL("file:" + movieFnm);
Player p = Manager.createRealizedPlayer(url);

//生成一个帧放置器
FramePositioningControl fpc = (FramePositioningControl) 
p.getControl("javax.media.control. FramePositioningControl");

//创建一个帧抓取器
FrameGrabbingControl fg = (FrameGrabbingControl) 
p.getControl("javax.media.control.FrameGrabbingControl");

//要求改变到一个prefetched 态
p.prefetch();

//一直等待,直到播放器处于那种状态...

//移动到具体的某帧,例如第100帧
fpc.seek(100);

//取得当前帧的一个快照
Buffer buf = fg.grabFrame(); 

//取得它的视频格式细节
VideoFormat vf = (VideoFormat) buf.getFormat();

//用视频格式初始化BufferToImage
BufferToImage bufferToImage =new BufferToImage(vf);

//把缓冲区数据转化成一幅图像
Image im = bufferToImage.createImage(buf);

//指定想得到的BufferedImage的格式
BufferedImage formatImg = 
new BufferedImage(
FORMAT_SIZE, FORMAT_SIZE, 
BufferedImage.TYPE_3BYTE_BGR);

//把该图像转化成一个BufferedImage
Graphics g = formatImg.getGraphics();
g.drawImage(im, 0, 0, 
FORMAT_SIZE, FORMAT_SIZE, null);
g.dispose();

  一个媒体播放器从创建到开始播放共经历6种状态。处于realized态的播放器知道如何对其数据进行着色,所以在要求时可以提供可视化组件和控件。我用了两个控件:FramePositioningControl 
和FrameGrabbingControl。FramePositioningControl提供seek()和skip()等方法,用于在一个动画中移动以查找一个特别的帧。FrameGrabbingControl提供了方法grabFrame(),它可以从动画的视频轨道中抓取当前帧。
为使这些控件工作,播放器必须实现从realized 态转入prefetched 态。这可以使播放器为进行媒体播放作好准备,并使媒体数据装入。

  对于prefetch()的调用是异步的,这意味着我的代码必须包含一个等待周期,直到完成一个变换状态为止。标准的JMF编码方案是实现一个waitForState()方法,它可以停止代码的执行,直到一个状态改变事件唤醒它。

  要抓取的帧可以用seek()方法在轨道中定位,然后调用grabFrame()方法实现帧的抓取。编码中必须经历多个转换步骤来把抓取的缓冲对象转怀蒍MFMovieScreen要求的BufferedImage对象。注意,BufferedImage对象使用了TYPE_3BYTE_BGR格式,这种格式对于该程序中的Java 
3D部分通过引用方式使用纹理是必需的。

  Sun的JMF站点 包括了一些有用的小例子,其中Seek.java一例说明了如何使用FramePositioningControl来遍历一个动画。 

 [编辑:gigi_miao] [返回首页]
 [1] [2] [3]  
相关文章: 
  ·跟我学Java Swing之游戏设计(1)(2005-10-17 16:32:45) 
  ·初学者如何开发出一个高质量的J2EE系统(2005-10-17 16:02:53) 
  ·什么是Java EE 5(2005-10-17 16:01:46) 
  ·Java手机软件图形界面API篇(2005-10-10 16:10:23) 
  ·Java手机软件图形界面API之低级GUI组件(2005-10-10 15:54:39) 
推荐文章:
·赢在2007赛迪网年度企业人物榜单揭晓 ·你最需要哪种类型的视频教程 ·不用网银也网上购物 三步自助开通 ·2007年UPA用户体验大会成功闭幕 
·2007中国青年设计节暨用户体验年会在京开幕 ·User Friendly 2007现场图片 ·手机畅游互联网 空中Opera 2.0实测 
·动易软件即将全面开源和免费 ·搜图有“道” 图片达人的搜索秘籍 ·数字水墙 08年世博会亮相 ·RabbitAir MinusA2空气净化器设计 ·Oscar 
Bjarnason 平面设计 ·国产杀毒软件半个月内勇夺两项国际权威认证 ·美化你的博客-推荐多个博客图标下载网站 
·微软回应Vista用户遇到的网络问题“设计如此” ·eBay改进用户体验 借鉴亚马逊页面设计搜索功能 ·极点五笔6.0正式版发布 ·WPS Office 
2007抢先试用 ·报告称Google Apps功能远不及微软Office ·什么是SOCK5代理,什么是HTTP代理最新评论
        更多评论 共 0 条评论
            网易通行证:    密码:         



     参与评论您尚未登陆系统,只能以游客身份发表评论,如果想以实名发表,请先登陆系统。 
       您的发表的评论将在5分钟内被审核,请耐心等待  

网易学院联系电话:020-61210163-560 合作/投稿邮箱:NeteaseSchool(at)126.com
合作媒体:结绳记事 艺网 中国电脑救援中心 ad110.com 中国教程网 FIF多媒体制作组 金鹰电脑教程网 时代光魔 好好学习 
天天向上主编信箱 热线:020-85105316 给网易提意见 
About NetEase - 公司简介 - 联系方法 - 招聘信息 - 客户服务 - 相关法律 - 网络营销 - 帮助中心
网易公司版权所有
©1997-2008   

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -