﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-&lt;font size="4"color="#6ac893"&gt;好好学习，好好吃饭&lt;/font&gt;-随笔分类-多媒体开发</title><link>http://www.blogjava.net/lusm/category/20012.html</link><description>&lt;br&gt;&lt;font color="#6ac893"&gt;喜欢交流  相互促进  共同进步 &lt;/font&gt;</description><language>zh-cn</language><lastBuildDate>Fri, 07 Sep 2007 18:49:53 GMT</lastBuildDate><pubDate>Fri, 07 Sep 2007 18:49:53 GMT</pubDate><ttl>60</ttl><item><title>[e]优秀3D软件及官方网站~~大全</title><link>http://www.blogjava.net/lusm/archive/2007/06/18/124906.html</link><dc:creator>幻想~@@~</dc:creator><author>幻想~@@~</author><pubDate>Mon, 18 Jun 2007 03:59:00 GMT</pubDate><guid>http://www.blogjava.net/lusm/archive/2007/06/18/124906.html</guid><wfw:comment>http://www.blogjava.net/lusm/comments/124906.html</wfw:comment><comments>http://www.blogjava.net/lusm/archive/2007/06/18/124906.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lusm/comments/commentRss/124906.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lusm/services/trackbacks/124906.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 现在用编程去实现3D好象不是什么潮流，当然有时间的话你看试试&nbsp;&nbsp;<a href='http://www.blogjava.net/lusm/archive/2007/06/18/124906.html'>阅读全文</a><img src ="http://www.blogjava.net/lusm/aggbug/124906.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lusm/" target="_blank">幻想~@@~</a> 2007-06-18 11:59 <a href="http://www.blogjava.net/lusm/archive/2007/06/18/124906.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]Java 3D编程实践——网络上的三维动画[学习笔记]</title><link>http://www.blogjava.net/lusm/archive/2007/03/21/105337.html</link><dc:creator>幻想~@@~</dc:creator><author>幻想~@@~</author><pubDate>Wed, 21 Mar 2007 10:15:00 GMT</pubDate><guid>http://www.blogjava.net/lusm/archive/2007/03/21/105337.html</guid><wfw:comment>http://www.blogjava.net/lusm/comments/105337.html</wfw:comment><comments>http://www.blogjava.net/lusm/archive/2007/03/21/105337.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lusm/comments/commentRss/105337.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lusm/services/trackbacks/105337.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 不是本人要用的软件 作为参考<br>下个文章，给大家介绍不用eclipse3.2等开发工具的入门方法&nbsp;&nbsp;<a href='http://www.blogjava.net/lusm/archive/2007/03/21/105337.html'>阅读全文</a><img src ="http://www.blogjava.net/lusm/aggbug/105337.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lusm/" target="_blank">幻想~@@~</a> 2007-03-21 18:15 <a href="http://www.blogjava.net/lusm/archive/2007/03/21/105337.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]VRML与JAVA相结合开发3D交互式虚拟场景</title><link>http://www.blogjava.net/lusm/archive/2007/03/19/104729.html</link><dc:creator>幻想~@@~</dc:creator><author>幻想~@@~</author><pubDate>Mon, 19 Mar 2007 05:57:00 GMT</pubDate><guid>http://www.blogjava.net/lusm/archive/2007/03/19/104729.html</guid><wfw:comment>http://www.blogjava.net/lusm/comments/104729.html</wfw:comment><comments>http://www.blogjava.net/lusm/archive/2007/03/19/104729.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lusm/comments/commentRss/104729.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lusm/services/trackbacks/104729.html</trackback:ping><description><![CDATA[
		<table cellspacing="5" cellpadding="5" width="680" border="0">
				<tbody>
						<tr>
								<td id="article_info" align="middle" bgcolor="#f8f8f8" height="30">类型：整理 | 来自：<a href="http://www.86vr.com/" target="_blank">86VR</a> | 作者：雷朝铨,吴伟斌 | 时间：2005-3-31 |  点击：
<script language="javascript" src="/scripts/hits.asp?id=5392"></script>
 814</td>
						</tr>
				</tbody>
		</table>
		<table cellspacing="5" cellpadding="0" width="680" border="0">
				<tbody>
						<tr>
								<td align="middle" background="/images/dot_h.gif" height="1">
										<img height="1" src="http://www.86vr.com/images/spacer.gif" width="1" />
								</td>
						</tr>
				</tbody>
		</table>
		<table cellspacing="5" cellpadding="0" width="680" border="0">
				<tbody>
						<tr>
								<td id="article_content">
										<p>
												<strong>摘要:　</strong>　借助EAI 和Script 节点将Java 和VRML 相结合,构建了一个三维交互式的虚拟场景,该场景克服了VRML 在交互方面的不足,实现了用户与虚拟场景之间以及用户与用户之间的交互和共享的功能,并在此基础上,构建了一个用于计算机图形学教学的虚拟场景框架,为VRML 在远程教育方面的普及和应用做了有益的探索. </p>
										<p>
												<strong>关键词:　</strong>VRML ;Java ; EAI ; 交互式;虚拟场景</p>
										<p>　　虚拟现实技术是当前国际上的一个研究热点,是一种逼真的通过各种传感设备模拟人在自然环境中的视、听、动作等行为的人机界面技术,实现操作者和环境直接进行自然交互. 该技术已经广泛地应用于军事、航空航天、医学、建筑设计、机械、地理、化学等众多的领域. </p>
										<br />
										<p>　　虚拟现实建模语言(Virtual Reality Modeling Language , 缩写为VRML) 是一个开放的、可扩充的三维场景描述语言,它描述了如何在World Wide Web 上创建和浏览三维虚拟场景. VRML 的构思始于1994 年春瑞士日内瓦的万维网(WWW) 的第一届国际会议上. 1994 年10 月在芝加哥召开的第二次万维网会议上公布了VRML1. 0 的规范草案,其主要的功能是生成静态的3D 场景,以及与HTML 链接的一些功能和措施. 1998 年1 月VRML 被ISO 正式批准为国际标准( ISO/ IEC/ 4772 -1 :1997 , 通常被称为VRML1997 , 也被称为VRML2. 0) . VRML2. 0 版将VRML 的静态世界改变为动态世界,并强化了互动功能,此外还增加了动画、传感器、事件、行为和脚本等功能. VRML 提供了54 个功能强大的节点用于描述三维场景中的对象,能够利用层次性文件关系创建任意大的动态境界[ 1 ]. 目前,国内在虚拟现实技术的应用方面除了个别领域外,基本上还处于探索研究阶段,主要是应用VRML 的三维建模功能创建一个用户可以浏览的静态三维场景,而在创建动态场景和多用户场景方面的研究相对较少. 本文旨在讨论使用VRML 与J ava 创建多用户交互式场景的结合方法,并给出了系统框架和实现方法. </p>
										<p>
												<strong>1 　VRML 与J ava 相结合</strong>
												<br />
												<br />　　VRML 本身并不具备与外部交互的能力,也不能完成普通程序设计中的转折、分支、循环等基本特征,它必须和其他语言相结合才能构造出具备交互能力的三维场景. 为了在虚拟场景中增加和删除对象,或者定义动画和对象的行为功能,一种方法是通过扩展Script 节点,利用J avaScript 和J ava 编程提高VRML 的应用扩展能力[ 2 ] ;另一种方法是使用EA I. Script 节点本身没有任何动作,其动作是由J ava 脚本来实现的. 然而,应用Script 节点只能按照预定的规则改变场景, 无法满足复杂的交互操作. 此时, 这里采用EA I(External Authoring Interface : 外部程序接口) 实现外部应用程序与VRML 场景的实时交互. EA I 是Silicon Graphics 公司的Chris Marrin 1997 年1 月提出的一种应用程序接口,是基于VRML 和J ava 小应用(J ava Applet) 之间事件传递而提出的规约,实现J ava Applet 与VRML 虚拟场景之间的相互通信. EA I 方法依赖于一个与VRML 浏览器相联系的Java 包的支持. 该J ava 包由vrml. external. 3 、vrml. external. field. 3 、vrml. external. node. 3 以及vrml. external. exception. 3 四个部分组成开发者使用该接口创建的小应用程序可以动态地创建、修改和删除VRML 场景中的节点[ 3 ]. EA I 允许用以下四种方式访问VRML 场景: (1) 访问BSI(Browser Script Interface : 浏览器脚本接口) 接口函数; (2) 发送一个事件给VRML 场景中节点的事件入口(event In) ; (3) 读取从VRML 场景中节点的事件出口(eventOut) 发出的最新值; (4) 当事件从节点的事件出口(eventOut) 发出时,获得一个通知,激活callback 方法. </p>
										<p>　　VRML 场景中任何使用DEF 定义的节点都可以被J ava Applet 程序所访问,获得一个节点的句柄后,该节点的event In 和eventOut 就能被引用. Java Applet 可以监视VRML 场景中节点的改变并能够在节点间传递事件来直接改变节点的属性. 简单的说,一方面EA I 能把VRML模型的变化传递给J ava Applet , 另一方面Java Applet 可以通过EA I 给VRML 传送各种各样的事件和信息,控制和改变虚拟场景. <br /><br />　　就功能而言,使用Script 节点和使用EA I 实现对VRML 场景的控制并没有什么不同. 一般来说对于单一的VRML 事件实现交互及运算功能可选择内部的Script , 若需集成多种媒体,并进行复杂网络控制,则使用EA I 更适宜. <br /><br /><strong>2 　交互式虚拟场景的实现</strong><br /><br /><strong>2. 1 　系统框架</strong><br /><br />　　一个基于VRML 和J ava 相结合的多用户交互的虚拟场景的框架见图1. <br />　　图1 　具有多用户交互、共享功能的虚拟场景框架<br /><br />　　图1 场景基于客户机/ 服务器模式. 服务器端包含HTTP 服务器、场景服务器和数据库服务器. HTTP 服务器负责HTML 文件、VRML 文件Java 文件以及其他相关资源(如声音、图片、影像等) 的存储与传输;场景服务器负责用户的登记和管理,响应用户的请求,将每一个在线用户的请求、控制信息加以合成,再以广播的方式传送给所有用户. 数据库存储所有变动对象的当前信息,如当一个新用户登陆以后,他的化身信息将写入该数据库,并通过数据库读取其它对象的信息,通过EA I 将这些信息在客户端的虚拟世界中表现出来. <br /><br /><strong>2. 2 　场景交互性的实现<br /></strong><br />　　虚拟场景的交互性体现在两个方面:一是用户与虚拟场景内的虚拟对象的交互,用户可以改变场景中虚拟对象的状态、位置,甚至可以对对象进行添加和删除操作;二是与其他用户之间的交互,用户可以控制替身的行为(如走、跑、转身、举手等) 和表情,可以看到其他用户替身状态的变化,可以与其他用户相互交换意见,开展讨论、演示,从事虚拟试验,合作开发等. 用户与虚拟场景的交互是通过在Java Applet 中使用EA I 来实现的,其处理流程如下: <br /><br />(1)Java 通过与VRML 进行相互通信,可以获取虚拟空间的数据信息,如替身的状态和动作,实体的状态等,形成一个通信数据包; <br />(2) 各个节点通过TCP/ IP 协议下的Java Socket 机制进行相互连接,将该通信数据包通过网络实时传输给各个节点; <br />(3) 当某个节点接受到相应的数据包后,Java 可以对VRML 空间进行动态控制,改变3D替身的位置和方向以及实体的状态,保持用户间信息的一致和事件的同步.下面是控制物体平移的部分关键Java 代码:</p>
										<div class="code" align="center">
												<pre>browser = Browser. getBrowser() ;<br />// 获得VRML 浏览器(场景) 的句柄<br />Node trigon1 = browser. getNode(”TRIGON1”<br />);<br />// 获得场景中TRIGON1 对象的句柄<br />translation = (EventinSFNode)trigon1. get Event In(”);<br />set-translation”<br />// 设定场景中该节点准备接受事件的域<br />translation. setValue(xyz)<br />// 设定改变场景中该节点的事件平移物体</pre>
										</div>
										<p>
												<strong>2. 3 　多用户共享的实现</strong>
												<br />
												<br />　　EAI 能够克服VRML 浏览器在用户接口方面的限制,通过其它的应用程序控制虚拟场景,使用户能够创建符合自己意图的虚拟场景,进而实现多个用户同时共享. 用户在虚拟场景中的交互是以替身的形式实现的. 这里,替身的定义符合H -Anim1. 0的人物建模标准[5 ]. H-Anim1. 0 标准提供了一个具有良好的兼容性、灵活性、简单性的人物模型的构造方法,按此标准建立的多用户共享虚拟场景具有很好的通用性和开放型. 外部程序,如Java Applet , 通常是以事件的形式读取和控制VRML 场景. 当场景中的一个替身发生变化或者替身的行为使得虚拟场景发生了改变,该信息将以事件的形式传送给服务器. 服务器再将接受到的信息以IP 广播的形式传送给虚拟场景内所有的用户,同时将此信息存放在数据库里. 当用户接受到服务器发出的信息时, 可以在客户端直接通过EAI 更改VRML 场景或替身的状态,这样在每个用户的浏览器上可以看到其他人的行为和替身的变化以及由此产生的场景的变化,从而实现了虚拟场景的多用户共享. <br /><br />　　另外,当多个用户进行合作开发或者共同进行虚拟实验时,应避免多个用户对同一物体进行修改而产生的冲突. 这里引入锁定机制避免该冲突,即当一个用户对某一物体进行控制时,会向服务器发送一个锁定请求,此时该物体不能被其它用户控制. 只有当用户对物体解锁后,其它用户才能提出另一个锁定要求. 控制物体节点的(ExposedField) touchsensorenabled 域可以实现对物体的锁定与解锁. <br /><br /><strong>3 　应用实例<br /></strong><br />　　基于以上的分析,这里建立了一个多用户交互式用于计算机图形学远程教学的虚拟场景. 用户以替身的形式进入虚拟场景,当用户点击不同的变换控制按钮时,在弹出的窗口中显示该变换的算法,同时虚拟场景中图形也发生相应的变换.用户则可以自由地在场景中漫游,从不同角度观察图形的变换,从而达到对不同变换算法加深理解的目的. 目前该系统正处于开发阶段,以上所述图<br /><br />2 　用于计算机图形学教学的虚拟场景的功能将逐步得以实现. 图2 是虚拟场景的屏幕拷贝,仅供参考. 本文将Java 与VRML 相结合,借助EAI 和VRML 的Script 节点构建了一个三维交互式虚拟场景,提出了系统的整体框架,给出了用户与虚拟场景以及用户之间的交互方式,并指出多用户共享时应注意的冲突问题. 在此基础上,开发了一个具有初步功能的用于计算机图形学远程教学的虚拟场景,该场景有助于加深学习者对计算机图形学各种算法的理解. <br /><br /><strong>参考文献:</strong><br />[ 1 ] 　VRML97 Specification[ EB/OL ] . ISO/IEC 14772-2 :2002[ S] . http ://www. web3d. org. <br />[ 2 ] 　赛博科技工作室. VRML 与Java 编程技术[ M ] . 北京:人民邮电出版社,2002. <br />[ 3 ] 　H. M. Deitel , P. J . Deitel. 奚红宇,史晓华,邵　晖译.JAVA 程序设计高级教程[ M ] . 北京:电子工业出版社,1999. <br />Developing 3D Interactive Virtual Scene with the Combination of VRML and JAVA L EI Chao2quan1 ,WU Wei2bin2 (1. Professional Education Department , Ningde Teachers College , Ningde Fujian 352100 , China ; <br />2. Network Info Center ,Quanzhou Normal University ,Fujian 362000 ,China) <br />Abstract :By using EAI and Script node , Java and VRML are combined in this paper to develop a 3D interactive virtual scene. This scene overcomes the shortage of VRML in the aspect of interactivity and features the interaction between the user and the virtual scene. And a multi2user shared environment is also realized in this scene. Based on this structure , a frame of the virtual scene is constructed for the computer graphics education.<br />Key words :VRML ;Java ; EA I ;interactivity ;virtual scene. 1995-2005 Tsinghua Tongfang Optical Disc Co., Ltd. All rights reserved.</p>
								</td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.blogjava.net/lusm/aggbug/104729.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lusm/" target="_blank">幻想~@@~</a> 2007-03-19 13:57 <a href="http://www.blogjava.net/lusm/archive/2007/03/19/104729.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>利用J2ME开发移动3D游戏之3D图形API</title><link>http://www.blogjava.net/lusm/archive/2007/02/25/100634.html</link><dc:creator>幻想~@@~</dc:creator><author>幻想~@@~</author><pubDate>Sun, 25 Feb 2007 12:42:00 GMT</pubDate><guid>http://www.blogjava.net/lusm/archive/2007/02/25/100634.html</guid><wfw:comment>http://www.blogjava.net/lusm/comments/100634.html</wfw:comment><comments>http://www.blogjava.net/lusm/archive/2007/02/25/100634.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lusm/comments/commentRss/100634.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lusm/services/trackbacks/100634.html</trackback:ping><description><![CDATA[2006-01-20 14:05　作者: 朱先忠 编译 出处:天极<br /><br /><p><strong>简述<br /><br /></strong>现在，移动游戏和移动应用开发极为热门！游戏中需要有时髦漂亮的图形，其设计标准比以前任何时候都要高。本文将告诉你怎样用酷毙的移动3D图形API为J2ME设备开发3D图形游戏。<br /><br />如果你在用MIDP1.0进行用户接口编程，那么有两条路你可以选择：使用高级的UI类或者一切由你自己从头开始。作为游戏开发者，第一种选择往往是不可能的；这是为什么游戏开发者不得不为他们的高级游戏开发自己的3D引擎的原因。无疑，这需要付出大量的时间和努力，而缺乏浮点数支持的CLDC 1.0（MIDP 1.0正是建于其上）对问题的解决没有多大帮助。<br /><br />在MIDP 2.0中，有一个可选的叫移动3D图形API的软件包，或者叫JSR 184。该API是第一个基于Java标准开发的移动设备上的三维图形软件包。该API既有高级又有低级图形特征；其中，高级特征称为保留模式，低级特征称为立即模式。保留模式使得开发者有可能使用场景图形并使场景中的物体根据虚拟相机和灯光的位置进行自身的着色。立即模式能够允许应用程序直接进行物体绘制。如果需要，可以在同一个应用程序中使用这两种模式。本文着重介绍立即模式。<br /><br /><b>3D API</b><br /><br />让我们以列举和解释该3D API中的类作为开始。除了这些API外，JSR 184还包含了一个场景图形结构和一个相应的文件格式以有效地管理和配置3D内容。该文件格式定义了一种m3g文件，这种文件典型地从3D建模文件应用程序中转换而来。</p><p align="center">表1．3D API类</p><table style="WIDTH: 696px; HEIGHT: 1523px" cellspacing="0" cellpadding="1" width="696" align="center" border="1"><tbody><tr><td>类 </td><td>描述</td></tr><tr><td>AnimationController</td><td>控制动画顺序。</td></tr><tr><td>AnimationTrack</td><td>把一个KeyframeSequence同一个AnimationController相关联。</td></tr><tr><td>Appearance </td><td>定义一个网眼（Mesh）或一个Spring3D的着色属性的一组对象。</td></tr><tr><td>Background</td><td>定义视图是怎样被清除的。</td></tr><tr><td>Camera </td><td>一个场景图顶点，它定义了场景中观察者的位置以及从3D到2D的投影。</td></tr><tr><td>CompositingMode</td><td>一个Appearance类，它封装了每一个像素的合成属性。</td></tr><tr><td>Fog </td><td>一个Appearance类，它包含了雾化的有关属性。</td></tr><tr><td>Graphics3D </td><td>一个单独的3D图形上下文。所有的着色操作都是在该类中的render()方法中实现的。</td></tr><tr><td>Group </td><td>一个场景图形结点，它存储了一个无序的结点集作为它的子结点。</td></tr><tr><td>Image2D</td><td>一个二维图像，可用于纹理，背景，或者精灵图像。</td></tr><tr><td>IndexBuffer</td><td>该类定义了如何把顶点连接起来以形成一个几何体。</td></tr><tr><td>KeyframeSequence</td><td>封装了一系列的具有时间戳和矢量值的关键帧的动画数据。</td></tr><tr><td>Light</td><td>描述了不同类型的光源。</td></tr><tr><td>Loader</td><td>下载和反串行化图形结点及结点成分，以及整个场景图形。</td></tr><tr><td>Material</td><td>封装了进行光学计算的材质属性。 </td></tr><tr><td>Mesh</td><td>描述了一个3D对象，它是用多边形面定义的。</td></tr><tr><td>MorphingMesh</td><td>描述了一个顶点－变形的多边形网眼。</td></tr><tr><td>Node</td><td>所有场景图形结点的抽象基类。其五个具体子类是：Camera，Mesh，Sprite3D，Light和Group。</td></tr><tr><td>Object3D</td><td>所有可以成为3D世界中组成部分的对象的抽象基类。</td></tr><tr><td>PolygonMode</td><td>封装了多边形级别属性。</td></tr><tr><td>RayIntersection</td><td>存储了对于分割的Mesh或Sprite3D的引用，以及有关分割点的信息。</td></tr><tr><td>SkinnedMesh </td><td>描述了一个框架动画的多边形网眼。</td></tr><tr><td>Sprite3D </td><td>用3D位置来描述一个2D图像。</td></tr><tr><td>Texture2D </td><td>封装了一个2D纹理图像和一个属性集合，这些属性指出该图像是如何应用到子网眼上的。</td></tr><tr><td>Transform </td><td>一个通用的4x4的浮点数矩阵，用来描述一个变换。</td></tr><tr><td>Transformable </td><td>Node和Texture2D类的抽象基类。</td></tr><tr><td>TriangleStripArray</td><td>定义了一个三角形带数组。</td></tr><tr><td>VertexArray </td><td>一个整型矢量数组，描述了顶点位置，法线，颜色或者纹理坐标。</td></tr><tr><td>VertexBuffer </td><td>存储对于VertexArrays的引用，它包含了一个顶点集的位置，颜色，法线，以及纹理坐标。</td></tr><tr><td>World</td><td>一个特别的Group结点，它作为场景图最顶层的容器。</td></tr></tbody></table><p><strong>举例<br /><br /></strong>我们将开发一个简单的旋转一个多边形的3D应用程序为例。该多边形是一个立方体，它的纹理是一张旧汽车相片。列表1展示了例程midlet的主要类-应用程序的中心类。该类负责创建应用程序并建立起运行MyCanvas的计时器。</p><p align="center">列表1. MIDletMain类</p><table style="WIDTH: 612px; HEIGHT: 1265px" bordercolor="#cccccc" width="612" align="center" bgcolor="#e3e3e3" border="1"><tbody><tr><td><strong>import javax.microedition.midlet.*;<br /><br />import javax.microedition.lcdui.*;<br /><br />import java.util.*;<br /><br />public class MIDletMain extends MIDlet {<br /><br />　static MIDletMain midlet;<br /><br />　MyCanvas d = new MyCanvas();<br /><br />　Timer iTimer = new Timer();<br /><br />　public MIDletMain() {<br /><br />this.midlet = this;<br /><br />　}<br /><br />　public void startApp() {<br /><br />Display.getDisplay(this).setCurrent(d);<br /><br />iTimer.schedule( new MyTimerTask(), 0, 40 );<br /><br />　}<br /><br />　public void pauseApp() {}<br /><br />　public void destroyApp(boolean unconditional) {}<br /><br />　public static void quitApp() {<br /><br />midlet.destroyApp(true);<br /><br />midlet.notifyDestroyed();<br /><br />midlet = null;<br /><br />　}<br /><br />　<br /><br />　class MyTimerTask extends TimerTask {<br /><br />public void run() {<br /><br />　if( d != null ) {<br /><br />d.repaint();<br /><br />　}<br /><br />}<br /><br />　}<br /><br />}</strong></td></tr></tbody></table><p><br />列表2显示了MyCanvas类，该类包含了应用程序的所有图形逻辑。init()方法负责结点的创建，纹理文件的装载并设置纹理，外观和背景也被一起设置。paint()方法负责着色并旋转立方体。图1展示了正在一个模拟器中运行的实际程序。 </p><p></p><p align="center"><strong>列表2. MyCanvas类<br /><br /></strong></p><table style="WIDTH: 709px; HEIGHT: 3500px" bordercolor="#cccccc" width="709" align="center" bgcolor="#e3e3e3" border="1"><tbody><tr><td><strong>import javax.microedition.lcdui.*;<br /><br />import javax.microedition.m3g.*;<br /><br />public class MyCanvas extends Canvas {<br /><br />　private Graphics3D graphics3d;<br /><br />　private Camera camera;<br /><br />　private Light light;<br /><br />　private float angle = 0.0f;<br /><br />　private Transform transform = new Transform();<br /><br />　private Background background = new Background();<br /><br />　private VertexBuffer vbuffer;<br /><br />　private IndexBuffer indexbuffer;<br /><br />　private Appearance appearance;<br /><br />　private Material material = new Material();<br /><br />　private Image image;<br /><br />　public MyCanvas() {<br /><br />// 创建Displayable对象以探听命令事件<br /><br />setCommandListener(new CommandListener() {<br /><br />　public void commandAction(Command c, Displayable d) {<br /><br />if (c.getCommandType() == Command.EXIT) {<br /><br />　MIDletMain.quitApp();}}<br /><br />　});<br /><br />　try { init();}<br /><br />　catch(Exception e) { e.printStackTrace();}<br /><br />　}<br /><br />　/**<br /><br />　* 组件的初始化<br /><br />　*/<br /><br />　private void init() throws Exception {<br /><br />addCommand(new Command("Exit", Command.EXIT, 1));<br /><br />graphics3d = Graphics3D.getInstance();<br /><br />camera = new Camera();<br /><br />camera.setPerspective( 60.0f,(float)getWidth()/ (float)getHeight(), 1.0f, 1000.0f );<br /><br />light = new Light();<br /><br />light.setColor(0xffffff);<br /><br />light.setIntensity(1.25f);<br /><br />short[] vert = {<br /><br />　5, 5, 5, -5, 5, 5, 5,-5, 5, -5,-5, 5,<br /><br />　-5, 5,-5, 5, 5,-5, -5,-5,-5, 5,-5,-5,<br /><br />　-5, 5, 5, -5, 5,-5, -5,-5, 5, -5,-5,-5,<br /><br />　5, 5,-5, 5, 5, 5, 5,-5,-5, 5,-5, 5,<br /><br />　5, 5,-5, -5, 5,-5, 5, 5, 5, -5, 5, 5,<br /><br />　5,-5, 5, -5,-5, 5, 5,-5,-5, -5,-5,-5 };<br /><br />VertexArray vertArray = new VertexArray(vert.length / 3, 3, 2);<br /><br />vertArray.set(0, vert.length/3, vert);<br /><br />//立方体的各个结点法线<br /><br />byte[] norm = {<br /><br />　0, 0, 127, 0, 0, 127, 0, 0, 127, 0, 0, 127,<br /><br />　0, 0,-127, 0, 0,-127, 0, 0,-127, 0, 0,-127,<br /><br />　-127, 0, 0, -127, 0, 0, -127, 0, 0, -127, 0, 0,<br /><br />　127, 0, 0, 127, 0, 0, 127, 0, 0, 127, 0, 0,<br /><br />　0, 127, 0, 0, 127, 0, 0, 127, 0, 0, 127, 0,<br /><br />　0,-127, 0, 0,-127, 0, 0,-127, 0, 0,-127, 0 };<br /><br />VertexArray normArray = new VertexArray(norm.length / 3, 3, 1);<br /><br />normArray.set(0, norm.length/3, norm);<br /><br />//各个结点的纹理坐标<br /><br />short[] tex = {<br /><br />　1, 0, 0, 0, 1, 1, 0, 1,<br /><br />　1, 0, 0, 0, 1, 1, 0, 1,<br /><br />　1, 0, 0, 0, 1, 1, 0, 1,<br /><br />　1, 0, 0, 0, 1, 1, 0, 1,<br /><br />　1, 0, 0, 0, 1, 1, 0, 1,<br /><br />　1, 0, 0, 0, 1, 1, 0, 1 };<br /><br />VertexArray texArray = new VertexArray(tex.length / 2, 2, 2);<br /><br />texArray.set(0, tex.length/2, tex);<br /><br />int[] stripLen = { 4, 4, 4, 4, 4, 4 };<br /><br />// 对象的VertexBuffer<br /><br />VertexBuffer vb = vbuffer = new VertexBuffer();<br /><br />vb.setPositions(vertArray, 1.0f, null);<br /><br />vb.setNormals(normArray);<br /><br />vb.setTexCoords(0, texArray, 1.0f, null);<br /><br />indexbuffer = new TriangleStripArray( 0, stripLen );<br /><br />//纹理图像<br /><br />image = Image.createImage( "/pic1.png" );<br /><br />Image2D image2D = new Image2D( Image2D.RGB, image );<br /><br />Texture2D texture = new Texture2D( image2D );<br /><br />texture.setFiltering(Texture2D.FILTER_NEAREST,<br /><br />Texture2D.FILTER_NEAREST);<br /><br />texture.setWrapping(Texture2D.WRAP_CLAMP,Texture2D.WRAP_CLAMP);<br /><br />texture.setBlending(Texture2D.FUNC_MODULATE);<br /><br />// 创建外观（Appearance）对象<br /><br />appearance = new Appearance();<br /><br />appearance.setTexture(0, texture);<br /><br />appearance.setMaterial(material);<br /><br />material.setColor(Material.DIFFUSE, 0xFFFFFFFF);<br /><br />material.setColor(Material.SPECULAR, 0xFFFFFFFF);<br /><br />material.setShininess(100.0f);<br /><br />background.setColor(0xffffcc);<br /><br />　}<br /><br />　protected void paint(Graphics g) {<br /><br />graphics3d.bindTarget(g, true,<br /><br />　Graphics3D.DITHER |<br /><br />　Graphics3D.TRUE_COLOR);<br /><br />　graphics3d.clear(background);<br /><br />//设置照相机<br /><br />Transform transform = new Transform();<br /><br />transform.postTranslate(0.0f, 0.0f, 30.0f);<br /><br />graphics3d.setCamera(camera, transform);<br /><br />//设置灯光<br /><br />graphics3d.resetLights();<br /><br />graphics3d.addLight(light, transform);<br /><br />//设置旋转<br /><br />angle += 1.0f;<br /><br />transform.setIdentity();<br /><br />transform.postRotate(angle, 1.0f, 1.0f, 1.0f);<br /><br />graphics3d.render(vbuffer, indexbuffer, appearance, transform);<br /><br />graphics3d.releaseTarget();<br /><br />　}<br /><br />}</strong></td></tr></tbody></table><br /><br /><br /><p align="center"><img class="fit-image" onmousewheel="javascript:return big(this)" style="ZOOM: 110%" src="http://developer.51cto.com/files/uploadimg/20060120/1421350.jpg" onload="javascript:if(this.width&gt;498)this.style.width=498;" border="0" /><br /><br />图1 正在一个模拟器中运行的应用程序</p><p><b>小结</b><br /><br />JSR 184对于可以运行MIDP 2.0的设备来说，是一个节省时间和空间的可选的软件开发包。它允许开发者使用两种图形方式-保留模式和立即模式-来产生3D图形。本文集中讲述了立即模式，并给出一个例子程序来说明怎样使用3D API。<br /></p><img src ="http://www.blogjava.net/lusm/aggbug/100634.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lusm/" target="_blank">幻想~@@~</a> 2007-02-25 20:42 <a href="http://www.blogjava.net/lusm/archive/2007/02/25/100634.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>