JAVA3D的网络三维技术的设计与实现论文.docx
- 文档编号:5842622
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:36
- 大小:1.68MB
JAVA3D的网络三维技术的设计与实现论文.docx
《JAVA3D的网络三维技术的设计与实现论文.docx》由会员分享,可在线阅读,更多相关《JAVA3D的网络三维技术的设计与实现论文.docx(36页珍藏版)》请在冰豆网上搜索。
JAVA3D的网络三维技术的设计与实现论文
基于Java3D的网络三维技术的设计与实现
摘要:
互联网的出现及飞速发展使IT业的各个领域发生了深刻的变化,它必然引发一些新技术的出现。
3D图形技术并不是一个新话题,在图形工作站以至于PC机上早已日臻成熟,并已应用到各个领域。
然而互联网的出现,却使3D图形技术发生了和正在发生着微妙而深刻的变化。
Web3D协会(前身是VRML协会)最先使用Web3D术语,这一术语的出现反映了这种变化的全貌,没有人能严格定义Web3D,在这里我们把Web3D理解为:
互联网上的3D图形技术,互联网代表了未来的新技术,很明显,3D图形和动画将在互联网上占有重要的地位。
Java3DAPI是Sun定义的用于实现3D显示的接口。
使用Java的重要理由之一是它的平台无关性。
Java3D提供了基于Java的上层接口。
Java3D把OpenGL和DirectX这些底层技术包装在Java接口中。
这种全新的设计使3D技术变得不再繁琐并且可以加入到J2SE、J2EE的整套架构,这些特性保证了Java3D技术强大的扩展性
本文以Java3D为开发平台,利用Java语言强大的网络功能,实现了在网页上对3D动画进行显示和操作。
关键字:
Java3D、Web3D、三维
Abstract:
TheInternetappearanceandtherapiddevelopmentcausedeachdomaintoITindustryhavethedeeptransformation,itinitiatedsomenewtechnicalinevitablytheappearance.The3Dgraphtechnologyisnotanewtopic,inthegraphworkstationdowntoonPCmachinealreadymoreordaymatured,andhasappliedtoeachdomain.HowevertheInternetappearance,causedthe3Dgraphtechnologytooccuractuallyandisoccurringisbeingsubtlebutthedeeptransformation.TheWeb3Dassociation(predecessoristheVRMLassociation)usestheWeb3Dterminologyfirst,thisterminologyappearancehadreflectedthiskindofchangecompletepicture,nobodycanstrictlydefineWeb3D,inherewedotheWeb3Dunderstandingis:
OntheInternet3Dgraphtechnology,theInternethasrepresentedthefuturenewtechnology,isveryobvious,the3DgraphandtheanimationwillholdtheimportantstatusontheInternet.
Java3DAPIistheSundefinitionusesinrealizingthe3Ddemonstrationconnection.UsesoneofJavaimportantreasonsisitsplatformirrelevant.Java3DhasprovidedbasedontheJavaupperformationconnection.Java3DOpenGLandDirectXthesefirstfloortechnologypackinginJavaconnection.Thiskindofbrand-newdesigncausesthe3DtechnologytochangenolongertediouslyandmayjointoJ2SE,theJ2EEentirewrapoverheadconstruction,thesecharacteristicshaveguaranteedtheJava3Dtechnologyformidableextension.
ThisarticledevelopstheplatformtakeJava3D,usestheJavalanguageformidablenetworkfunctionnf,realizedhascarriedonthedemonstrationandtheoperationonthehomepagetothe3Danimation.
Keyword:
Java3D,Web3D,3D
第一章绪论
§1.1引言
互联网的出现及飞速发展使IT业的各个领域发生了深刻的变化,它必然引发一些新技术的出现。
3D图形技术并不是一个新话题,在图形工作站以至于PC机上早已日臻成熟,并已应用到各个领域。
然而互联网的出现,却使3D图形技术发生了和正在发生着微妙而深刻的变化。
Web3D协会(前身是VRML协会)最先使用Web3D术语,这一术语的出现反映了这种变化的全貌,没有人能严格定义Web3D,在这里我们把Web3D理解为:
互联网上的3D图形技术,互联网代表了未来的新技术,很明显,3D图形和动画将在互联网上占有重要的地位。
§1.2互联网3D图形技术的应用
当前,互联网上的图形仍以2D图像为主流。
但是,3D图形必将在互联网上占有重要地位。
互联网上的交互式3D图形技术---Web3D正在取得新的进展,正在脱离本地主机的3D图形,而形成自己独立的框架。
互联网的需求是它发展的动力。
互联网的内容提供商和商业网站不断使用新的工具与技术使网站更具吸引力,Web3D图形是最新的和最具魅力的技术。
Web3D图形将在互联网上有广泛应用,从目前的趋势来看主要有:
1.电子商务:
用3D图形展示商品,更能吸引客户。
虚拟商场是人们热中的话题。
客户可以在虚拟商场中漫游,挑选商品。
许多Web3D图形技术的软件厂商是瞄准了电子商务的,如cult3D和viewpoint,其图形技术主要是用于商品的3D展示,您甚至于可以在网上操作或使用要购买的商品。
然而,Web3D图形的商业利益究竟有多大,网上的商品销售商只有在能增加销售额的情况下,才肯出资制作Web3D图形。
2.联机娱乐休闲与游戏:
多用户联机3D游戏将搬上互联网,现在您已经可以在网上经历简单的赛车或空中射击游戏,下载文件不超过2M。
当然,如果您想运行大的联机游戏仍然需要CD-ROM的支持。
娱乐休闲网站对Web3D图形有更多的需求,如:
城市景观或风景点的虚拟旅游,虚拟博物馆,展览会,艺术画廊等等。
3.医学:
医疗培训,医疗商业的B2B和B2,许多医学图像的处理将使用Web3D图形技术。
4.地理信息系统的数据可视化:
将GIS与Web3D结合起来,可以在互联网上建立许多应用系统,如地图,导游,城市建设,交通运输等等。
5.多用户虚拟社区(virtual-community):
虚拟社区是建立一个大型的虚拟场景,每个虚拟场景的访问者都可以指定一个"替身","替身"在场景中可以漫游。
当几个远程访问者同时访问虚拟社区时,它们可以用语音或文字通讯。
虚拟社区可以是一个会场,教室,俱乐部,展览会,画廊等。
它真正实现了虚拟现实,在互联网上仿真虚拟社会的各种活动,分布在世界各地的人可以借助互联网开展各种文化科技,娱乐活动。
而此时虚拟场景就是他们的三维环境。
虚拟社区很可能是Web3D图形在互联网上的一种主要应用形式。
现在,已有几家公司推出了自己虚拟社区及全套的解决方案,如Blaxxun,AdobeAtmosphere.Geometrek,Cybertown,OuterWorlds,berkom,ActiveWorlds,iCity,pointworlds等。
它们除了提供虚拟场景制作以外,还提供:
服务器管理,通讯管理,用户管理等功能。
Blaxxun公司VirtualWorldsPlatform5.1服务器已经有许多网站用它建立虚拟社区。
§1.3JAVA3D在Web中的成功
Java在互联网上几乎随处可见,而它在3D图形上正在显示出更大的威力。
使用Java的重要理由之一是它的平台无关性。
它的平台无关性来自于Java只需部分编译,负责编译Java程序的叫做JavaVirtualMachine(JVM),不同的平台有它自己JVM,处理与平台相关的功能。
因此,只要支持JVM,就能运行JAVA小程序。
两种最有名的浏览器Netscape和IE3都支持JVM(Java1.0.2)。
因此用Java制作的3D图形几乎都可以在互联网的浏览器上显示。
令人遗憾的是:
微软在它的未来极具发展前景的WindowXP中不再预装JVM,由此引起的麻烦是巨大的:
要运行基于JAVA的应用,就必须安装JVM,这显然比安装一个插件更麻烦。
由于全世界有90%的人上网使用微软不要钱的浏览器IE,而Web3D的渲染引擎插件又必须安装在IE上。
面对Web3D技术未来的发展潜力,软件巨人微软作何打算我们不得而知。
ShoutInteractiveandBlaxxun两个公司使用纯Java技术开发了实时渲染引擎(大小只有50K),这个小小的JAVA小程序,不仅在网上自动下载,而且可以在客户端实时渲染3D场景,逐帧显示动态的3D图像。
ShoutInteractiveandBlaxxun为用户扩充自己的3D图形功能预留了极大的空间。
两个公司并没有抛弃VRML,ShoutInteractive公司可以接受VRML文件,并把它变成自己的文件格式,Blaxxun公司的软件可以直接运行VRML。
当然,Shout3D的小巧灵活并不是没有代价的:
它简化了VRML的功能,VRML的一些功能不能用小小50K的Java来实现。
可以说这两个公司最先在它们的产品中实现了核心的X3D技术。
使用这种"无插件技术"(plug-in)的Shout公司为Macy'sandExcitewebportal网站制作了栩栩如生如生的3D虚拟时装模特展示,观看者用菜单可以选择:
展示的服装,模特的肤色,发型,步型,甚至于灯光都可以用菜单即刻更换。
观看者可以用鼠标变换视角,远近,从各个角度观看动态展示。
而所有的展示文件只有1M-2M,不需下载插件。
图像的质量较好,人物动画的动作流畅自然。
第二章Java3D技术的简介
Java3D用其自己定义的场景图和观察模式等技术构造了3D的上层结构,实现了在Java平台使用三维技术。
本章将介绍Java3D特有的两个重要概念:
场景图(SceneGraph)、观察模式(ViewModel)。
在接口使用上的介绍分为两部分:
说明如何使用Java3D接口;说明如何将Java3D技术与Java原有的Web技术(JSP、Serverlet)相结合,在网页上实现三维显示。
§2.1Java3D概述
2.1.1Java3D简介
Java3DAPI是Sun定义的用于实现3D显示的接口。
3D技术是底层的显示技术,Java3D提供了基于Java的上层接口。
Java3D把OpenGL和DirectX这些底层技术包装在Java接口中。
这种全新的设计使3D技术变得不再繁琐并且可以加入到J2SE、J2EE的整套架构,这些特性保证了Java3D技术强大的扩展性。
JAVA3D建立在JAVA2(JAVA1.2)基础之上,JAVA语言的简单性使JAVA3D的推广有了可能。
它实现了以下三维显示能够用到的功能:
1.生成简单或复杂的形体(也可以调用现有的三维形体)
2.使形体具有颜色、透明效果、贴图
3.在三维环境中生成灯光、移动灯光
4.具有行为的处理判断能力(键盘、鼠标、定时等)
5.生成雾、背景、声音
6.使形体变形、移动、生成三维动画
7.编写非常复杂的应用程序,用于各种领域如VR(虚拟现实)
2.1.2Java3D与其他三维技术的比较
JAVA3D可应用在三维动画、三维游戏、机械CAD等多个领域。
但作为三维显示实现技术,它并不是唯一选择而且是一个新面孔。
在Java3D之前已经存在很多三维技术,这些三维技术在实现的技术、使用的语言以及适用的情况上各有不同,我主要介绍与Java3D又密切关系的三种技术:
OpenGL、DIRECT3D、VRML
OpenGL
OpenGL是业界最为流行也是支持最广泛的一个底层3D技术,几乎所有的显卡厂商都在底层实现了对OpenGL的支持和优化。
OpenGL同时也定义了一系列接口用于编程实现三维应用程序,但是这些接口使用C(C++)语言实现并且很复杂。
掌握针对OpenGL的编程技术需要花费大量时间精力。
DIRECT3D
DIRECT3D是Microsoft公司推出的三维图形编程API,它主要应用于三维游戏的编程。
众多优秀的三维游戏都是由这个接口实现。
与OpenGL一样,Direct3D的实现主要使用C++语言。
VRML2.0(VRML97)
自1997年12月正式成为国际标准之后,在网络上得到了广泛的应用,这是一种比BASIC、JAVASCRIPT等还要简单的语言。
脚本化的语句可以编写三维动画片、三维游戏、计算机三维辅助教学。
它最大的优势在于可以嵌在网页中显示,但这种简单的语言功能较弱(如目前没有形体之间的碰撞检查功能),与JAVA语言等其它高级语言的连接较难掌握,因而逐渐被淹没在竞争激烈的网络三维技术中。
表1是Java3D与其它三维技术的比较图,可以从中直观的看出他们相互间的区别:
技术
实现层次
开发技术(难度)
扩展性
最适合应用领域
Java3D
中层(JVM)
Java(较易)
J2SE标准扩展(好)
网上三维显示实现…
OpenGL
底层(显卡)
C\C++(难)
各大厂商支持(较好)
三维设计软件…
Direct3D
底层(操作系统)
C++(较难)
Windows平台(差)
三维游戏…
VRML
上层(网页)
标记语言(容易)
安装插件支持(一般)
网上虚拟现实…
表1:
3D技术对招表
§2.2Java3D的场景图结构
Java3D实际上是Java语言在三维图形领域的扩展,与Java一样,Java3D有纯粹的面向对象结构。
Java3D的数据结构采用的是SceneGraphsStructure(场景图),就是一些具有方向性的不对称图形组成的树状结构(图1)。
实际由Java3D定义的一系列的对象,这些对象不是杂乱无序,对象之间也不是毫无关系。
如果想让三维图像正常显示,必须在这两点上遵循Java3D场景图的规定。
观察图1,Java3D场景图的树结构由各种各样的对象组成:
在图中出现的这些对象都实现了Java3D中有重要的意义的类,从逻辑上我将它们分为三类:
∙根节点(Root):
VirtualUniverseObject
∙节点(Node):
LocalObject、BranchGroupNodes、BehaviorNode、Shape3DNode…
∙叶子节点(Leaf):
Appearance、Geometry..
图1:
在应用中的Java3D场景图
场景图中线和线的交汇点称为节点(Node),这些节点都是Java3D类的实例(InstanceofClass),节点之间的线表示各个实例之间的关系。
∙VirtualUniverse是根节点,每一个场景图的VirtualUniverse是唯一的。
∙在VirtualUniverse下面是Locale节点,每个程序可以有一个或多个Locale,但同时只能有一个Locale处于显示状态,就好像一个三维世界非常大,有很多个景点,但我同时只能在一个景点进行观察。
Java3D允许从一个Locale跳到另一个Locale,不过绝大多数程序只有一个Locale。
∙每一个Locale可以拥有多个BranchGroup节点。
所有三维形体的其位置信息(TransformGroupNodes)都建立在BranchGroup节点之上。
∙TransformGroupNode用来设定Shape3D在VirtualUniverse中的位置。
∙Spape3DNode是三维图形节点,这个节点的实体放映在最后的显示画面中,就是三维世界中的每个形体。
包括正方体、球体以及任何形状和外观的三维形体。
∙位于场景图最下层的是两个叶子节点:
三维体的外观(Appearance)和几何信息(Geometry),这两个节点定义了一个三维体的显示效果。
∙ViewPlatform位于图1的另一个分枝上,与前面所有描述三维体的性质的概念不同,ViewPlatform和View都是用来定义观察者的信息。
对于建立一个简单的Java3D程序,我至少需要了解三个概念:
虚拟宇宙(VirtualUniverse)、场景(Locale)、坐标系统。
2.2.1虚拟宇宙(VirtualUniverse)
在Java3D中,虚拟宇宙被定义为结合一系列对象的三维空间。
虚拟宇宙被用作最大的聚集体表现单位,同时也可被看作一个数据库。
不管是在物理空间还是逻辑内容,虚拟宇宙都可以很大。
实际上在大多数情况下,一个虚拟宇宙就可以满足一个应用程序所有的需求。
虚拟宇宙是各自独立的个体,原因是在任何时候一个结点对象都不能在超过一个的虚拟宇宙中存在。
同样的,在一个虚拟宇宙中的结点对象也不能在其他的虚拟宇宙中可见或者与其他的对象结合。
对于一个Java3D应用程序,必须定义一个虚拟宇宙才可以在这个"宇宙"中显示三维图像。
2.2.2Java3D的坐标系统
默认情况下,Java3D的坐标系统是右旋的,用方位语义学来解释就是:
正y方向是本地重力的上,正x方向是水平的右,正z是这对着观察者的方向。
默认的单位是米。
双精度浮点、单精度浮点甚至是定点来表示的三维坐标都足够来表示和显示丰富的3D场景。
不幸的是,场景不是真实世界,更不必说整个宇宙了。
如果使用单精度坐标,有可能出现下列情景:
1.离原点仅有一百公里的距离,被描绘得相当量子化,所能达到的最好效果就是三分之一英寸,在实际应用中这样的精度比要求的粗糙的多。
2.如果要缩小到一个很小的尺寸(例如表现集成电路的大小),甚至在离原点很近的地方就会出现同坐标问题。
为了支持一个大型的邻接虚拟宇宙,Java3D选择了有256位的高分辨率坐标:
Java3D高分辨率坐标由三个256位的定点数组成,分别表示x、y、z。
定点被固定在第128位,并且值1.0被定义为真实的1米。
这个坐标系统足够用来描述一个超过几百万光年距离的宇宙,也可以定义小于一质子大小(小于一普朗克长度)的对象。
在Java3D中,高分辨率坐标仅仅用于将更加传统的浮点坐标系统嵌入更高分辨率的底层系统。
用这种方法,可以创造出一个具有任意大小和规模的在视觉上无缝的虚拟宇宙,而且可以不必担心数字上的精度。
(参看表2)
一个256位的定点数还具有能够直接表示几乎任何的合理适当的单精度浮点值。
Java3D用有符号的、两位补码的256位定点数字来表示高分标率坐标。
尽管Java3D保持内部高分辨率坐标表示的不透明,但用户用有八个整型变量的数组来表示256位的坐标。
Java3D把数组中从索引号由0到7分别看作高分辨率坐标的从高到底位上的数。
第128位上是二进制的小数点,也可以说在索引号为3和4的整数之间。
高分辨率坐标的1.0就是1米。
如果是"小"的虚拟宇宙(类似于相对比例的几百米),在虚拟宇宙对象下(0.0,0.0,0.0)点建立一个带有高分辨率坐标的Locale作为根节点就足够使用了;装入程序在装入过程中能自动构建结点,而在高分辨率坐标下的点不需要任何外部文件的直接描述。
大一些的虚拟宇宙期待被构建为有如同计算机文件那样的层次,这意味着一个根宇宙要包含由外部文件引用的嵌入虚拟宇宙。
就这样,文件引用的对象(用户指定的Java3D组或高分辨率结点)定义了被读入现存虚拟宇宙的数据的位置。
Java3D高分辨率坐标
2nMeters
Units
87.29
Universe(20billionlightyears)
69.68
Galaxy(100000lightyears)
53.07
Lightyear
43.43
Solarsystemdiameter
23.60
Earthdiameter
10.65
Mile
9.97
Kilometer
0.00
Meter
-19.93
Micron
-33.22
Angstrom
-115.57
Plancklength
表2:
Java3D高分辨率坐标
2.2.3场景(Locale)
为了支持大型虚拟宇宙,Java3D提出了"Locale"的概念。
Locale把高分辨率坐标作为起源。
把高分辨率坐标看作精确的定位,它在高分辨率坐标的影响范围之内使用精度较低的浮点坐标指定对象的位置。
一个Locale和与它结合的高分辨率坐标一起组成了在虚拟宇宙之下的一个表现层。
所有虚拟宇宙包含一个或多个高分辨率Locale。
而所有其他的对象都是附加在一个Locale上的。
在整个体系中,高分辨率坐标扮演的是上层的仅供翻译的转换结点。
例如,附加到一个特定Locale的所有对象的坐标都会与这个Locale位置的高分辨率坐标有关。
(图2)
图2:
高分辨率坐标指定场景
如果一个虚拟宇宙与传统的计算机图像的概念相近,给定的虚拟宇宙可能会变得太大。
所以在通常情况下最好把一个场景图看作是一个高分辨率坐标场景的子结点。
构造一个三维场景,程序员必须运行一个Java3D程序。
这个Java3D应用程序必须首先创建一个虚拟宇宙对象并且至少把一个Locale对象附加之上。
然后,构建出需要的场景图像,它由一个分支组结点开始并且包括至少一个观察平台对象,而场景图就是附加于这个观察平台。
当一个包含场景图的观察对象被附加于一个虚拟宇宙,Java3D的渲染循环就开始工作。
这样,场景就会和它的观察对象一起被绘制在画布上。
§2.3实现三维世界
2.3.1Java3D的观察模式
Java3D引入了一种新的观察模式,这种模式使Java编写的显示效果符合"编写一次,随处运行"的原则。
Java3D还把这种功能推广到显示设备或六等级自由度输入外部设备,例如跟踪摄像头。
这种新的观察模式的"一次编写,随处观察"的特性意味着用Java3D观察模式编写的应用程序和Applet可以广泛应用于各种各样的显示设备。
在不修改场景图的条件下,图像可以在包括标准电脑显示、多放射显示空间和安装摄像头设备的显示设备上被渲染。
这也意味着在不需要修改场景图的情况下,同一个应用程序既能够渲染立体景象,还能通过摄像头的输入控制渲染过的观察图。
Java3D的观察模式通过完全分离虚拟和现实世界来实现这种多功能性。
这种模式区分了以下两种情况:
1.一个应用程序通过控制观察平台的位置和方向在虚拟宇宙中
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JAVA3D 网络 三维 技术 设计 实现 论文