解决方案

基于Java3D的网络三维技术的设计与实现

seo靠我 2023-09-24 09:29:14

3D图形技术并不是一个新话题,在图形工作站以至于PC机上早已日臻成熟,并已应用到各个领域。然而互联网的出现,却使3D图形技术发生了和正在发生着微妙而深刻的变化。Web3D协会(前身是VRML协会)最先SEO靠我使用Web3D术语,这一术语的出现反映了这种变化的全貌,没有人能严格定义Web3D,在这里我们把Web3D理解为:互联网上的3D图形技术,互联网代表了未来的新技术,很明显,3D图形和动画将在互联网上占SEO靠我有重要的地位。

Java3D API是Sun定义的用于实现3D显示的接口。使用Java 的重要理由之一是它的平台无关性。Java3D提供了基于Java的上层接口。Java3D把OpenGL和DirectSEO靠我X这些底层技术包装在Java接口中。这种全新的设计使3D技术变得不再繁琐并且可以加入到J2SE、J2EE的整套架构,这些特性保证了Java3D技术强大的扩展性

本文以Java3D为开发平台,利用JavaSEO靠我语言强大的网络功能,实现了在网页上对3D动画进行显示和操作。

3D图形必将在互联网上占有重要地位。互联网上的交互式3D图形技术--- Web3D正在取得新的进展,正在脱离本地主机的3D图形,而形成自己独SEO靠我立的框架。互联网的需求是它发展的动力。互联网的内容提供商和商业网站不断使用新的工具与技术使网站更具吸引力,Web3D图形是最新的和最具魅力的技术。Web3D图形将在互联网上有广泛应用,从目前的趋势来看SEO靠我主要有:

1.电子商务:

用3D图形展示商品,更能吸引客户。虚拟商场是人们热中的话题。客户可以在虚拟商场中漫游,挑选商品。许多Web3D图形技术的软件厂商是瞄准了电子商务的,如cult3D和viewpoiSEO靠我nt,其图形技术主要是用于商品的3D展示,您甚至于可以在网上操作或使用要购买的商品。然而,Web3D图形的商业利益究竟有多大,网上的商品销售商只有在能增加销售额的情况下,才肯出资制作Web3D图形。

2SEO靠我. 联机娱乐休闲与游戏:

多用户联机3D游戏将搬上互联网,现在您已经可以在网上经历简单的赛车或空中射击游戏,下载文件不超过2M。当然,如果您想运行大的联机游戏仍然需要CD-ROM的支持。娱乐休闲网站对WSEO靠我eb3D图形有更多的需求,如:城市景观或风景点的虚拟旅游,虚拟博物馆,展览会,艺术画廊等等。

3. 医学:

医疗培训,医疗商业的B2B和B2,许多医学图像的处理将使用Web3D图形技术。

4. 地理信息系统SEO靠我的数据可视化:

将GIS与Web3D结合起来,可以在互联网上建立许多应用系统,如地图,导游,城市建设,交通运输等等。

5. 多用户虚拟社区(virtual-community):

虚拟社区是建立一个大型的虚SEO靠我拟场景,每个虚拟场景的访问者都可以指定一个"替身", "替身"在场景中可以漫游。当几个远程访问者同时访问虚拟社区时,它们可以用语音或文字通讯。虚拟社区可以是一个会场,教室,俱乐部,展览会,画廊等。它真SEO靠我正实现了虚拟现实,在互联网上仿真虚拟社会的各种活动,分布在世界各地的人可以借助互联网开展各种文化科技,娱乐活动。而此时虚拟场景就是他们的三维环境。虚拟社区很可能是Web3D图形在互联网上的一种主要应用SEO靠我形式。

现在,已有几家公司推出了自己虚拟社区及全套的解决方案,如Blaxxun, Adobe Atmosphere. Geometrek ,Cybertown, OuterWorlds, berkom SEO靠我,ActiveWorlds,iCity,pointworlds等。它们除了提供虚拟场景制作以外,还提供:服务器管理,通讯管理,用户管理等功能。Blaxxun公司Virtual Worlds PlatfSEO靠我orm 5.1服务器已经有许多网站用它建立虚拟社区。

§1.3 JAVA3D在Web中的成功

Java在互联网上几乎随处可见,而它在3D图形上正在显示出更大的威力。使用Java 的重要理由之一是它的平台无SEO靠我关性。它的平台无关性来自于Java只需部分编译,负责编译Java程序的叫做Java Virtual Machine (JVM),不同的平台有它自己JVM,处理与平台相关的功能。因此,只要支持JVM,就SEO靠我能运行JAVA小程序。两种最有名的浏览器Netscape 和 IE 3都支持JVM(Java 1.0.2)。因此用Java制作的3D图形几乎都可以在互联网的浏览器上显示。令人遗憾的是:微软在它的未来极SEO靠我具发展前景的Window XP中不再预装JVM,由此引起的麻烦是巨大的:要运行基于JAVA的应用,就必须安装JVM,这显然比安装一个插件更麻烦。

由于全世界有90%的人上网使用微软不要钱的浏览器IE,而SEO靠我Web3D的渲染引擎插件又必须安装在IE上。面对Web3D技术未来的发展潜力,软件巨人微软作何打算我们不得而知。Shout Interactive and Blaxxun两个公司使用纯Java技术开发SEO靠我了实时渲染引擎(大小只有50K),这个小小的JAVA小程序,不仅在网上自动下载,而且可以在客户端实时渲染3D场景,逐帧显示动态的3D图像。Shout Interactive and Blaxxun为用SEO靠我户扩充自己的3D图形功能预留了极大的空间。两个公司并没有抛弃VRML,Shout Interactive公司可以接受VRML文件,并把它变成自己的文件格式,Blaxxun公司的软件可以直接运行VRMLSEO靠我。当然,Shout3D的小巧灵活并不是没有代价的:它简化了VRML的功能,VRML的一些功能不能用小小50K的Java来实现。可以说这两个公司最先在它们的产品中实现了核心的X3D技术。

使用这种"无插件SEO靠我技术"(plug-in)的Shout公司为Macys and Excite web portal网站制作了栩栩如生如生的3D虚拟时装模特展示,观看者用菜单可以选择:展示的服装,模特的肤色,发型,步型,SEO靠我甚至于灯光都可以用菜单即刻更换。观看者可以用鼠标变换视角,远近,从各个角度观看动态展示。而所有的展示文件只有1M-2M,不需下载插件。图像的质量较好,人物动画的动作流畅自然。

第二章  Java3D技术SEO靠我的简介

Java3D用其自己定义的场景图和观察模式等技术构造了3D的上层结构,实现了在Java平台使用三维技术。本章将介绍Java3D特有的两个重要概念:场景图(Scene Graph)、观察模式(ViSEO靠我ew Model)。在接口使用上的介绍分为两部分:说明如何使用Java3D接口;说明如何将Java3D技术与Java原有的Web技术(JSP、Serverlet)相结合,在网页上实现三维显示。

§2.1SEO靠我 Java3D概述

2.1.1  Java3D简介

Java3D API是Sun定义的用于实现3D显示的接口。3D技术是底层的显示技术,Java3D提供了基于Java的上层接口。Java3D把OpenGLSEO靠我和DirectX这些底层技术包装在Java接口中。这种全新的设计使3D技术变得不再繁琐并且可以加入到J2SE、J2EE的整套架构,这些特性保证了Java3D技术强大的扩展性。

JAVA3D建立在JAVASEO靠我2(JAVA1.2)基础之上,JAVA语言的简单性使JAVA3D的推广有了可能。它实现了以下三维显示能够用到的功能:

生成简单或复杂的形体(也可以调用现有的三维形体) 使形体具有颜色、透明效果、贴图 在SEO靠我三维环境中生成灯光、移动灯光具有行为的处理判断能力(键盘、鼠标、定时等) 生成雾、背景、声音使形体变形、移动、生成三维动画编写非常复杂的应用程序,用于各种领域如VR(虚拟现实)

2.1.2  Java3SEO靠我D与其他三维技术的比较

JAVA3D可应用在三维动画、三维游戏、机械CAD等多个领域。但作为三维显示实现技术,它并不是唯一选择而且是一个新面孔。在Java3D之前已经存在很多三维技术,这些三维技术在实现SEO靠我的技术、使用的语言以及适用的情况上各有不同,我主要介绍与Java3D又密切关系的三种技术:OpenGL、DIRECT3D、VRML

OpenGL

OpenGL是业界最为流行也是支持最广泛的一个底层3D技术SEO靠我,几乎所有的显卡厂商都在底层实现了对OpenGL的支持和优化。OpenGL同时也定义了一系列接口用于编程实现三维应用程序,但是这些接口使用C(C++)语言实现并且很复杂。掌握针对OpenGL的编程技术SEO靠我需要花费大量时间精力。

DIRECT3D

DIRECT3D是Microsoft公司推出的三维图形编程API,它主要应用于三维游戏的编程。众多优秀的三维游戏都是由这个接口实现。与OpenGL一样,DirecSEO靠我t3D的实现主要使用C++语言。

VRML2.0(VRML97)

自1997年12月正式成为国际标准之后,在网络上得到了广泛的应用,这是一种比BASIC、JAVASCRIPT等还要简单的语言。脚本化的语句SEO靠我可以编写三维动画片、三维游戏、计算机三维辅助教学。它最大的优势在于可以嵌在网页中显示,但这种简单的语言功能较弱(如目前没有形体之间的碰撞检查功能),与JAVA语言等其它高级语言的连接较难掌握,因而逐渐SEO靠我被淹没在竞争激烈的网络三维技术中。

表1是Java3D与其它三维技术的比较图,可以从中直观的看出他们相互间的区别:

技术

实现层次

开发技术(难度)

扩展性

最适合应用领域

Java3D

中层(JVM)

Java(较易SEO靠我

J2SE标准扩展(好)

网上三维显示实现…

OpenGL

底层(显卡)

C\C++(难)

各大厂商支持(较好)

三维设计软件…

Direct3D

底层(操作系统)

C++(较难)

Windows平台(差)

三维游戏…

VRSEO靠我ML

上层(网页)

标记语言(容易)

安装插件支持(一般)

网上虚拟现实…

13D技术对招表

§2.2 Java3D的场景图结构

Java3D实际上是Java语言在三维图形领域的扩展,与Java一样,Java3SEO靠我D有纯粹的面向对象结构。Java3D的数据结构采用的是Scene Graphs Structure(场景图),就是一些具有方向性的不对称图形组成的树状结构(图1)。

实际由Java3D定义的一系列的对象SEO靠我,这些对象不是杂乱无序,对象之间也不是毫无关系。如果想让三维图像正常显示,必须在这两点上遵循Java3D场景图的规定。观察图1,Java3D场景图的树结构由各种各样的对象组成:

在图中出现的这些对象都实SEO靠我现了Java3D中有重要的意义的类,从逻辑上我将它们分为三类:

根节点(Root):Virtual Universe Object 节点(Node):Local Object、Branch Group SEO靠我Nodes、Behavior Node、Shape3D Node… 叶子节点(Leaf):Appearance、Geometry..

场景图中线和线的交汇点称为节点(Node),这些节点都是Java3DSEO靠我类的实例(Instance of Class),节点之间的线表示各个实例之间的关系。

Virtual Universe是根节点,每一个场景图的Virtual Universe是唯一的。 在VirtualSEO靠我 Universe下面是Locale节点,每个程序可以有一个或多个Locale,但同时只能有一个Locale处于显示状态,就好像一个三维世界非常大,有很多个景点,但我同时只能在一个景点进行观察。JavSEO靠我a3D允许从一个Locale跳到另一个Locale,不过绝大多数程序只有一个Locale。 每一个Locale可以拥有多个Branch Group节点。所有三维形体的其位置信息(Transform GSEO靠我roup Nodes)都建立在Branch Group节点之上。 Transform Group Node用来设定Shape3D在Virtual Universe中的位置。 Spape3D Node是SEO靠我三维图形节点,这个节点的实体放映在最后的显示画面中,就是三维世界中的每个形体。包括正方体、球体以及任何形状和外观的三维形体。 位于场景图最下层的是两个叶子节点:三维体的外观(Appearance)和几SEO靠我何信息(Geometry),这两个节点定义了一个三维体的显示效果。 View Platform位于图1的另一个分枝上,与前面所有描述三维体的性质的概念不同,View Platform和View都是用来SEO靠我定义观察者的信息。

对于建立一个简单的Java3D程序,我至少需要了解三个概念:虚拟宇宙(Virtual Universe)、场景(Locale)、坐标系统。

2.2.1  虚拟宇宙(Virtual UnSEO靠我iverse)

在Java3D中,虚拟宇宙被定义为结合一系列对象的三维空间。虚拟宇宙被用作最大的聚集体表现单位,同时也可被看作一个数据库。不管是在物理空间还是逻辑内容,虚拟宇宙都可以很大。实际上在大多数SEO靠我情况下,一个虚拟宇宙就可以满足一个应用程序所有的需求。

虚拟宇宙是各自独立的个体,原因是在任何时候一个结点对象都不能在超过一个的虚拟宇宙中存在。同样的,在一个虚拟宇宙中的结点对象也不能在其他的虚拟宇宙中SEO靠我可见或者与其他的对象结合。 对于一个Java3D应用程序,必须定义一个虚拟宇宙才可以在这个"宇宙"中显示三维图像。

2.2.2  Java3D的坐标系统

默认情况下,Java3D的坐标系统是右旋的,用方位SEO靠我语义学来解释就是:正y方向是本地重力的上,正x方向是水平的右,正z是这对着观察者的方向。默认的单位是米。 双精度浮点、单精度浮点甚至是定点来表示的三维坐标都足够来表示和显示丰富的3D场景。不幸的是,场SEO靠我景不是真实世界,更不必说整个宇宙了。如果使用单精度坐标,有可能出现下列情景:

离原点仅有一百公里的距离,被描绘得相当量子化,所能达到的最好效果就是三分之一英寸,在实际应用中这样的精度比要求的粗糙的多。 SEO靠我如果要缩小到一个很小的尺寸(例如表现集成电路的大小),甚至在离原点很近的地方就会出现同坐标问题。

为了支持一个大型的邻接虚拟宇宙,Java3D选择了有256位的高分辨率坐标:

Java3D高分辨率坐标由三SEO靠我个256位的定点数组成,分别表示x、y、z。定点被固定在第128位,并且值1.0被定义为真实的1米。这个坐标系统足够用来描述一个超过几百万光年距离的宇宙,也可以定义小于一质子大小(小于一普朗克长度)的SEO靠我对象。

在Java3D中,高分辨率坐标仅仅用于将更加传统的浮点坐标系统嵌入更高分辨率的底层系统。用这种方法,可以创造出一个具有任意大小和规模的在视觉上无缝的虚拟宇宙,而且可以不必担心数字上的精度。(参看SEO靠我表2)

一个256位的定点数还具有能够直接表示几乎任何的合理适当的单精度浮点值。

Java3D用有符号的、两位补码的256位定点数字来表示高分标率坐标。尽管Java3D保持内部高分辨率坐标表示的不透明,但SEO靠我用户用有八个整型变量的数组来表示256位的坐标。Java3D把数组中从索引号由0到7分别看作高分辨率坐标的从高到底位上的数。第128位上是二进制的小数点,也可以说在索引号为3和4的整数之间。高分辨率坐SEO靠我标的1.0就是1米。 如果是"小"的虚拟宇宙(类似于相对比例的几百米),在虚拟宇宙对象下(0.0,0.0,0.0)点建立一个带有高分辨率坐标的Locale作为根节点就足够使用了;装入程序在装入过程中能SEO靠我自动构建结点,而在高分辨率坐标下的点不需要任何外部文件的直接描述。 大一些的虚拟宇宙期待被构建为有如同计算机文件那样的层次,这意味着一个根宇宙要包含由外部文件引用的嵌入虚拟宇宙。就这样,文件引用的对象SEO靠我(用户指定的Java3D组或高分辨率结点)定义了被读入现存虚拟宇宙的数据的位置。

为了支持大型虚拟宇宙,Java3D提出了"Locale"的概念。Locale把高分辨率坐标作为起源。把高分辨率坐标看作精SEO靠我确的定位,它在高分辨率坐标的影响范围之内使用精度较低的浮点坐标指定对象的位置。

一个Locale和与它结合的高分辨率坐标一起组成了在虚拟宇宙之下的一个表现层。所有虚拟宇宙包含一个或多个高分辨率LocalSEO靠我e。而所有其他的对象都是附加在一个Locale上的。在整个体系中,高分辨率坐标扮演的是上层的仅供翻译的转换结点。例如,附加到一个特定Locale的所有对象的坐标都会与这个Locale位置的高分辨率坐标SEO靠我有关。(图2)

如果一个虚拟宇宙与传统的计算机图像的概念相近,给定的虚拟宇宙可能会变得太大。所以在通常情况下最好把一个场景图看作是一个高分辨率坐标场景的子结点。构造一个三维场景,程序员必须运行一个JavSEO靠我a3D程序。这个Java3D应用程序必须首先创建一个虚拟宇宙对象并且至少把一个Locale对象附加之上。然后,构建出需要的场景图像,它由一个分支组结点开始并且包括至少一个观察平台对象,而场景图就是附加SEO靠我于这个观察平台。当一个包含场景图的观察对象被附加于一个虚拟宇宙,Java3D的渲染循环就开始工作。这样,场景就会和它的观察对象一起被绘制在画布上。

§2.3 实现三维世界

2.3.1  Java3D的观察SEO靠我模式

Java3D引入了一种新的观察模式,这种模式使Java编写的显示效果符合"编写一次,随处运行"的原则。Java3D还把这种功能推广到显示设备或六等级自由度输入外部设备,例如跟踪摄像头。这种新的观察SEO靠我模式的"一次编写,随处观察"的特性意味着用Java3D观察模式编写的应用程序和Applet可以广泛应用于各种各样的显示设备。在不修改场景图的条件下,图像可以在包括标准电脑显示、多放射显示空间和安装摄像SEO靠我头设备的显示设备上被渲染。这也意味着在不需要修改场景图的情况下,同一个应用程序既能够渲染立体景象,还能通过摄像头的输入控制渲染过的观察图。 Java3D的观察模式通过完全分离虚拟和现实世界来实现这种多SEO靠我功能性。这种模式区分了以下两种情况:

一个应用程序通过控制观察平台的位置和方向在虚拟宇宙中对一个观察台对象(ViewPlatform)定位、定向和设定比例尺; 渲染器使用已知位置和方向计算出要使用的观察SEO靠我对象,对终端用户物理环境的描述确定用户在物理环境中的位置和方向。

为什么使用一个新的模式,由于在底层的编程接口中可以找到基于照相机的观察模式,开发者通过它可以控制所有渲染图的参数。它可以应付处理常规的应SEO靠我用程序,但是处理有更广阔的适应性的系统的时候就显得力不从心,这些系统包括:把整个世界作为一个单元装入和显示的观察器或浏览器、可供终端用户观察、操纵、显示、甚至与虚拟世界交互的系统。

基于照相机的观察模式SEO靠我仿效在虚拟世界中放置一个照相机而不是一个人。开发者必须持续重新配置一个照相机来模拟"在虚拟世界中有一个人"。Java3D观察模式直接和跟踪摄像头结合。在有摄像头的情况下,用户会有好像他们是真实的存在在SEO靠我那个虚拟世界的错觉,而开发者可以不做任何附加的工作就可以为用户带来这种效果。在没有摄像头并且只是用来表现一个单一的标准显示的情况下,Java3D观察模式表现得更像传统的基于照相机的观察模式,只是加上了SEO靠我能够产生立体透视图的功能。在一个需要由物理环境规定一些观察参数的系统中,让应用程序来控制所有的观察参数并不合理。例子就是:一个带有摄像头的显示设备可以用其光系统直接决定应用程序中的观察领域。不同的设备SEO靠我有不同的光系统,程序开发者硬绑定这样的参数或允许终端用户改变这样的参数都是不合理的。另外一个例子是:一个可以由用户当前的头部位置自动计算出观察参数的系统。只有一个对世界的说明和一条预先定义的轨迹可能不SEO靠我会严密的定义一个终端对象的观察。对于有摄像头设备用户,他们可能会期待在沿着一条固定的路线前进的时候能够看到他们左右两旁的物体。就好像在一个游乐场中,游客乘坐观光车按照固定的路线参观游乐场,但是在这过程SEO靠我中,游客可以持续转动他们的头。

由于依靠终端用户的具体物理环境,观察的各个参数,尤其是观察和投影的基体变化很大。影响观察和投影基体的因素包括显示设备的物理尺寸,显示设备的安装方法(在用户的桌面或用户的头SEO靠我顶上),计算机是否知道用户的头在三维空间的位置,头顶装置真实的观察领域,显示设备上每平方英寸的像素数,还有其他类似的参数。Java3D建立的观察模式完全可以满足上述所有的需求。

2.3.2  Java3SEO靠我D中用来定义观察的对象

Java3D通过几个对象来发布它的观察模式。特别是View对象和与它相关的组件对象:  PhysicalBody对象、PhysicalEnvironment对象、Canvas3DSEO靠我对象、Screen3D对象。图3描述了View对象的中心角色和组件对象的辅助角色。

观察有关的对象都在图3中,它们起的作用如下:

ViewPlatform(观察平台)一个view用一个叶子结点来在场景图SEO靠我为自己定位。观察平台的起始结点指定了它的位置、方向和在虚拟世界中的比例尺。

View(观察)主要的观察对象包含了很多观察的状态。

Canvas3D:抽象窗口工具箱中画布对象的3D版本。它描绘了一个可以让SEO靠我Java3D在上面画图像的窗口。它包括了一个对Screen3D对象的引用和描述一个Canvas3D要用到的尺寸、形状和位置信息。

Screen3D一个包含描述显示荧屏物理属性信息的对象。Java3D把SEO靠我显示荧屏信息分别放在单独的对象中,这样做可以防止在每一个Canvas3D对象中不同的显示屏幕信息共享一个屏幕。

PhysicalBody:一个包含刻度信息的对象,它描述了用户的物理身体。

PhysicalSEO靠我Environment:一个包含刻度信息的对象,它描述了物理世界。主要的信息描述了环境的六自由度硬件。

这些对象一起描述观察的几何体胜于明白的提供观察或投影基体。Java3D的表现工具用这个信息来构造适SEO靠我合的观察和投影基体。这些观察对象的几何中心为产生一个观察提供了更大的弹性,这种弹性需要支持可以选择的显示配置。

ViewPlatform: 在虚拟世界中的位置 一个ViewPlatform结点定义了一个SEO靠我坐标系统。这样,在虚拟世界中就有了一个有原点或参考点的参考系。观察平台是一个附加在观察对象的点并且作为决定描绘工具观察的基础。图4表示了一个场景图的一部分,它包括一个观察平台结点。直接在观察平台之上的SEO靠我结点决定了它在虚拟世界中的位置和方向。应用程序和行为通过修改直接在观察平台之上任何与TransformGroup结点结合的Tramsform3D对象可以在虚拟世界中任意移动ViewPlatform。一SEO靠我个简单的应用程序可能直接在一个观察平台上定义一个TransformGroup结点。一个虚拟宇宙可能有很多不同的观察平台,但是一个特定的View对象只能附加于一个单一的观察平台之上。这样,每个画在CanSEO靠我vas3D上的图画都是从一个单一的观察平台开始。

未完待续。。。

“SEO靠我”的新闻页面文章、图片、音频、视频等稿件均为自媒体人、第三方机构发布或转载。如稿件涉及版权等问题,请与 我们联系删除或处理,客服邮箱:html5sh@163.com,稿件内容仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同 其观点或证实其内容的真实性。

网站备案号:浙ICP备17034767号-2