基于Java3D的网络三维技术的设计与实现_第1页
基于Java3D的网络三维技术的设计与实现_第2页
基于Java3D的网络三维技术的设计与实现_第3页
基于Java3D的网络三维技术的设计与实现_第4页
基于Java3D的网络三维技术的设计与实现_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于基于 Java3D 的网络三维技术的设计与实现的网络三维技术的设计与实现 摘要摘要:互联网的出现及飞速发展使 IT 业的各个领域发生了深刻的变化, 它必然引发一些新技术的出现。3D 图形技术并不是一个新话题,在图形 工作站以至于 PC 机上早已日臻成熟,并已应用到各个领域。然而互联 网的出现,却使 3D 图形技术发生了和正在发生着微妙而深刻的变化。 Web3D 协会(前身是 VRML 协会)最先使用 Web3D 术语,这一术语的 出现反映了这种变化的全貌,没有人能严格定义 Web3D,在这里我们把 Web3D 理解为:互联网上的 3D 图形技术,互联网代表了未来的新技术, 很明显,3D 图

2、形和动画将在互联网上占有重要的地位。 Java3D API 是 Sun 定义的用于实现 3D 显示的接口。使用 Java 的重 要理由之一是它的平台无关性。Java3D 提供了基于 Java 的上层接口。 Java3D 把 OpenGL 和 DirectX 这些底层技术包装在 Java 接口中。这种全 新的设计使 3D 技术变得不再繁琐并且可以加入到 J2SE、J2EE 的整套架 构,这些特性保证了 Java3D 技术强大的扩展性 本文以 Java3D 为开发平台,利用 Java 语言强大的网络功能,实现 了在网页上对 3D 动画进行显示和操作。 关键字关键字:Java3D、Web3D、三维

3、Abstract: The Internet appearance and the rapid development caused each domain to IT industry have the deep transformation, it initiated some new technical inevitably the appearance. The 3D graph technology is not a new topic, in the graph workstation down to on PC machine already more or day mature

4、d, and has applied to each domain. However the Internet appearance, caused the 3D graph technology to occur actually and is occurring is being subtle but the deep transformation. The Web3D association (predecessor is the VRML association) uses the Web3D terminology first, this terminology appearance

5、 had reflected this kind of change complete picture, nobody can strictly define Web3D, in here we do the Web3D understanding is: On the Internet 3D graph technology, the Internet has represented the future new technology, is very obvious, the 3D graph and the animation will hold the important status

6、 on the Internet. Java3D API is the Sun definition uses in realizing the 3D demonstration connection. Uses one of Java important reasons is its platform irrelevant. Java3D has provided based on the Java upper formation connection. Java3D OpenGL and DirectX these first floor technology packing in Jav

7、a connection. This kind of brand-new design causes the 3D technology to change no longer tediously and may join to J2SE, the J2EE entire wrap overhead construction, these characteristics have guaranteed the Java3D technology formidable extension. This article develops the platform take Java3D, uses

8、the Java language formidable network function nf, realized has carried on the demonstration and the operation on the homepage to the 3D animation. Key word: Java3D, Web3D,3D 目录目录 基于基于 JAVA3D 的网络三维技术的设计与实现的网络三维技术的设计与实现.1 摘要摘要:.1 ABSTRACT:.1 第一章第一章 绪论绪论.5 1.1 引言 .5 1.2 互联网 3D 图形技术的应用.5 1.3 JAVA3D 在 WE

9、B中的成功 .6 第二章第二章 JAVA3D 技术的简介技术的简介.7 2.1 JAVA3D 概述.7 2.1.1 Java3D简介.7 2.1.2 Java3D与其他三维技术的比较.7 2.2 JAVA3D 的场景图结构.9 2.2.1 虚拟宇宙(Virtual Universe).10 2.2.2 Java3D的坐标系统.10 2.2.3 场景(Locale).12 2.3 实现三维世界 .13 2.3.1 Java3D的观察模式.13 2.3.2 Java3D中用来定义观察的对象.14 2.3.3 在三维世界中建立、移动观察点.16 2.3.4 Java3D的网络基础.17 第三章第三章

10、 实现实现 JAVA3D 结构体系的方法结构体系的方法.17 3.1 总体设计 .17 3.2 基本形体的生成 .17 3.2.1平板的生成.17 3.2.2 立方体的生成.18 3.2.3 圆锥的生成.18 3.2.4 球体的生成.18 3.2.5.圆柱体的生成.19 3.3 点、线、面的生成 .19 3.3.1点的生成.19 3.3.2直线的生成.20 3.3.3面的生成.20 3.4 外部复杂形体的调用 .21 3.5 背景变换的实现方法.21 3.5.1 灯光.21 3.5.2 纹理贴图.23 3.5.3 雾.23 3.6 动画的生成 .23 第四章第四章 JAVA3D 场景的实现场景

11、的实现.24 4.1JAVA3D 的实现流程.24 4.2 JAVA3D 的建模.25 4.2.1 生成场景:.25 4.2.2 Temple的圆柱体的构建.25 4.2.3 Tower的构建.26 4.3 动画的实现 .28 4.3.1 调用galleon.obj文件.28 4.3.2 物体转动.29 4.3.3场景的移动.29 4.4 背景变换 .31 4.4.1 创建灯光.31 4.4.2 创建背景图片.34 4.4.3 指数雾.35 4.4.4 背景音乐.36 4.5 在网页上显示 3D 图形.37 第五章第五章 实践和展望实践和展望.39 5.1 WEB3D 技术发展前景.39 5.

12、2 论文总结 .40 参考文献参考文献.40 第一章第一章 绪论绪论 1.1 引言引言 互联网的出现及飞速发展使 IT 业的各个领域发生了深刻的变化,它 必然引发一些新技术的出现。3D 图形技术并不是一个新话题,在图形工 作站以至于 PC 机上早已日臻成熟,并已应用到各个领域。然而互联网 的出现,却使 3D 图形技术发生了和正在发生着微妙而深刻的变化。Web 3D 协会(前身是 VRML 协会)最先使用 Web3D 术语,这一术语的出现 反映了这种变化的全貌,没有人能严格定义 Web3D,在这里我们把 Web 3D 理解为:互联网上的 3D 图形技术,互联网代表了未来的新技术,很 明显,3D

13、图形和动画将在互联网上占有重要的地位。 1.2 互联网互联网 3D 图形技术的应用图形技术的应用 当前,互联网上的图形仍以 2D 图像为主流。但是,3D 图形必将在 互联网上占有重要地位。互联网上的交互式 3D 图形技术- Web3D 正在 取得新的进展,正在脱离本地主机的 3D 图形,而形成自己独立的框架 。互联网的需求是它发展的动力。互联网的内容提供商和商业网站不断 使用新的工具与技术使网站更具吸引力,Web3D 图形是最新的和最具魅 力的技术。Web3D 图形将在互联网上有广泛应用,从目前的趋势来看主 要有: 1.电子商务: 用 3D 图形展示商品,更能吸引客户。虚拟商场是人们热中的话题

14、 。客户可以在虚拟商场中漫游,挑选商品。许多 Web3D 图形技术的软件 厂商是瞄准了电子商务的,如 cult3D 和 viewpoint,其图形技术主要是用 于商品的 3D 展示,您甚至于可以在网上操作或使用要购买的商品。然 而,Web3D 图形的商业利益究竟有多大,网上的商品销售商只有在能增 加销售额的情况下,才肯出资制作 Web3D 图形。 2. 联机娱乐休闲与游戏: 多用户联机 3D 游戏将搬上互联网,现在您已经可以在网上经历简 单的赛车或空中射击游戏,下载文件不超过 2M。当然,如果您想运行大 的联机游戏仍然需要 CD-ROM 的支持。娱乐休闲网站对 Web3D 图形有 更多的需求,

15、如:城市景观或风景点的虚拟旅游,虚拟博物馆,展览会 ,艺术画廊等等。 3. 医学: 医疗培训,医疗商业的 B2B 和 B2,许多医学图像的处理将使用 We b3D 图形技术。 4. 地理信息系统的数据可视化: 将 GIS 与 Web3D 结合起来,可以在互联网上建立许多应用系统, 如地图,导游,城市建设,交通运输等等。 5. 多用户虚拟社区(virtual-community): 虚拟社区是建立一个大型的虚拟场景,每个虚拟场景的访问者都可 以指定一个替身, 替身在场景中可以漫游。当几个远程访问者同时 访问虚拟社区时,它们可以用语音或文字通讯。虚拟社区可以是一个会 场,教室,俱乐部,展览会,画廊

16、等。它真正实现了虚拟现实,在互联 网上仿真虚拟社会的各种活动,分布在世界各地的人可以借助互联网开 展各种文化科技,娱乐活动。而此时虚拟场景就是他们的三维环境。虚 拟社区很可能是 Web3D 图形在互联网上的一种主要应用形式。 现在,已有几家公司推出了自己虚拟社区及全套的解决方案,如 Bla xxun, Adobe Atmosphere. Geometrek ,Cybertown, OuterWorlds, ber kom ,ActiveWorlds,iCity,pointworlds 等。它们除了提供虚拟场景制 作以外,还提供:服务器管理,通讯管理,用户管理等功能。Blaxxun 公 司 Vi

17、rtual Worlds Platform 5.1 服务器已经有许多网站用它建立虚拟社区 。 1.3 JAVA3D 在在 Web 中的成功中的成功 Java 在互联网上几乎随处可见,而它在 3D 图形上正在显示出更大 的威力。使用 Java 的重要理由之一是它的平台无关性。它的平台无关性 来自于 Java 只需部分编译,负责编译 Java 程序的叫做 Java Virtual Mac hine (JVM),不同的平台有它自己 JVM,处理与平台相关的功能。因此 ,只要支持 JVM,就能运行 JAVA 小程序。两种最有名的浏览器 Netsca pe 和 IE 3 都支持 JVM(Java 1.0

18、.2)。因此用 Java 制作的 3D 图形几 乎都可以在互联网的浏览器上显示。令人遗憾的是:微软在它的未来极具 发展前景的 Window XP 中不再预装 JVM,由此引起的麻烦是巨大的:要 运行基于 JAVA 的应用,就必须安装 JVM,这显然比安装一个插件更麻 烦。 由于全世界有 90%的人上网使用微软不要钱的浏览器 IE,而 Web3D 的渲染引擎插件又必须安装在 IE 上。面对 Web3D 技术未来的发展潜力 ,软件巨人微软作何打算我们不得而知。Shout Interactive and Blaxxun 两个公司使用纯 Java 技术开发了实时渲染引擎(大小只有 50K),这个 小小

19、的 JAVA 小程序,不仅在网上自动下载,而且可以在客户端实时渲 染 3D 场景,逐帧显示动态的 3D 图像。Shout Interactive and Blaxxun 为 用户扩充自己的 3D 图形功能预留了极大的空间。两个公司并没有抛弃 VRML,Shout Interactive 公司可以接受 VRML 文件,并把它变成自己的 文件格式,Blaxxun 公司的软件可以直接运行 VRML。当然,Shout3D 的 小巧灵活并不是没有代价的:它简化了 VRML 的功能,VRML 的一些功 能不能用小小 50K 的 Java 来实现。可以说这两个公司最先在它们的产品 中实现了核心的 X3D 技

20、术。 使用这种无插件技术(plug-in)的 Shout 公司为 Macys and Excite web portal 网站制作了栩栩如生如生的 3D 虚拟时装模特展示,观看者用 菜单可以选择:展示的服装,模特的肤色,发型,步型,甚至于灯光都 可以用菜单即刻更换。观看者可以用鼠标变换视角,远近,从各个角度 观看动态展示。而所有的展示文件只有 1M-2M,不需下载插件。图像的 质量较好,人物动画的动作流畅自然。 第二章第二章 Java3D 技术的简介技术的简介 Java3D 用其自己定义的场景图和观察模式等技术构造了 3D 的上层 结构,实现了在 Java 平台使用三维技术。本章将介绍 Jav

21、a3D 特有的两 个重要概念:场景图(Scene Graph)、观察模式(View Model)。在 接口使用上的介绍分为两部分:说明如何使用 Java3D 接口;说明如何将 Java3D 技术与 Java 原有的 Web 技术(JSP、Serverlet)相结合,在网页 上实现三维显示。 2.1 Java3D 概述概述 2.1.1 Java3D 简介简介 Java3D API 是 Sun 定义的用于实现 3D 显示的接口。3D 技术是底层 的显示技术,Java3D 提供了基于 Java 的上层接口。Java3D 把 OpenGL 和 DirectX 这些底层技术包装在 Java 接口中。这种

22、全新的设计使 3D 技 术变得不再繁琐并且可以加入到 J2SE、J2EE 的整套架构,这些特性保 证了 Java3D 技术强大的扩展性。 JAVA3D 建立在 JAVA2(JAVA1.2)基础之上,JAVA 语言的简单性 使 JAVA3D 的推广有了可能。它实现了以下三维显示能够用到的功能: 1. 生成简单或复杂的形体(也可以调用现有的三维形体) 2. 使形体具有颜色、透明效果、贴图 3. 在三维环境中生成灯光、移动灯光 4. 具有行为的处理判断能力(键盘、鼠标、定时等) 5. 生成雾、背景、声音 6. 使形体变形、移动、生成三维动画 7. 编写非常复杂的应用程序,用于各种领域如 VR(虚拟现

23、实) 2.1.2 Java3D 与其他三维技术的比较与其他三维技术的比较 JAVA3D 可应用在三维动画、三维游戏、机械 CAD 等多个领域。但 作为三维显示实现技术,它并不是唯一选择而且是一个新面孔。在 Java3 D 之前已经存在很多三维技术,这些三维技术在实现的技术、使用的语 言以及适用的情况上各有不同,我主要介绍与 Java3D 又密切关系的三种 技术:OpenGL、DIRECT3D、VRML OpenGL OpenGL 是业界最为流行也是支持最广泛的一个底层 3D 技术,几乎 所有的显卡厂商都在底层实现了对 OpenGL 的支持和优化。OpenGL 同 时也定义了一系列接口用于编程实

24、现三维应用程序,但是这些接口使用 C(C+)语言实现并且很复杂。掌握针对 OpenGL 的编程技术需要花费 大量时间精力。 DIRECT3D DIRECT3D 是 Microsoft 公司推出的三维图形编程 API,它主要应用 于三维游戏的编程。众多优秀的三维游戏都是由这个接口实现。与 Open GL 一样,Direct3D 的实现主要使用 C+语言。 VRML2.0(VRML97) 自 1997 年 12 月正式成为国际标准之后,在网络上得到了广泛的应 用,这是一种比 BASIC、JAVASCRIPT 等还要简单的语言。脚本化的语 句可以编写三维动画片、三维游戏、计算机三维辅助教学。它最大的

25、优 势在于可以嵌在网页中显示,但这种简单的语言功能较弱(如目前没有 形体之间的碰撞检查功能),与 JAVA 语言等其它高级语言的连接较难 掌握,因而逐渐被淹没在竞争激烈的网络三维技术中。 表 1 是 Java3D 与其它三维技术的比较图,可以从中直观的看出他们 相互间的区别: 技术实现层次 开发技术(难 度) 扩展性 最适合应用领 域 Java3 D 中层(JVM)Java(较易) J2SE 标准扩展 (好) 网上三维显示 实现 Open GL 底层(显卡)CC+(难) 各大厂商支持 (较好) 三维设计软 件 Direct 3D 底层(操作系 统) C+(较难) Windows 平台 (差)

26、三维游戏 VRM L 上层(网页) 标记语言(容 易) 安装插件支持 (一般) 网上虚拟现 实 表表 1:3D 技术对招表技术对招表 2.2 Java3D 的场景图结构的场景图结构 Java3D 实际上是 Java 语言在三维图形领域的扩展,与 Java 一样,Ja va3D 有纯粹的面向对象结构。Java3D 的数据结构采用的是 Scene Graph s Structure(场景图),就是一些具有方向性的不对称图形组成的树状结 构(图 1)。 实际由 Java3D 定义的一系列的对象,这些对象不是杂乱无序,对象 之间也不是毫无关系。如果想让三维图像正常显示,必须在这两点上遵 循 Java3

27、D 场景图的规定。观察图 1,Java3D 场景图的树结构由各种各样 的对象组成: 在图中出现的这些对象都实现了 Java3D 中有重要的意义的类,从逻 辑上我将它们分为三类: 根节点(Root):Virtual Universe Object 节点(Node):Local Object、Branch Group Nodes、Behavior Node、Shape3D Node 叶子节点(Leaf):Appearance、Geometry. 图图 1:在应用中的:在应用中的 Java3D 场景图场景图 场景图中线和线的交汇点称为节点(Node),这些节点都是 Java3D 类的实例(Insta

28、nce of Class),节点之间的线表示各个实例之间的关系 。 Virtual Universe 是根节点,每一个场景图的 Virtual Universe 是 唯一的。 在 Virtual Universe 下面是 Locale 节点,每个程序可以有一个或 多个 Locale,但同时只能有一个 Locale 处于显示状态,就好像一个三维 世界非常大,有很多个景点,但我同时只能在一个景点进行观察。Java3 D 允许从一个 Locale 跳到另一个 Locale,不过绝大多数程序只有一个 Lo cale。 每一个 Locale 可以拥有多个 Branch Group 节点。所有三维形体 的

29、其位置信息(Transform Group Nodes)都建立在 Branch Group 节点 之上。 Transform Group Node 用来设定 Shape3D 在 Virtual Universe 中 的位置。 Spape3D Node 是三维图形节点,这个节点的实体放映在最后的 显示画面中,就是三维世界中的每个形体。包括正方体、球体以及任何 形状和外观的三维形体。 位于场景图最下层的是两个叶子节点:三维体的外观(Appearan ce)和几何信息(Geometry),这两个节点定义了一个三维体的显示效 果。 View Platform 位于图 1 的另一个分枝上,与前面所有描述

30、三维 体的性质的概念不同,View Platform 和 View 都是用来定义观察者的信 息。 对于建立一个简单的 Java3D 程序,我至少需要了解三个概念:虚拟 宇宙(Virtual Universe)、场景(Locale)、坐标系统。 2.2.1 虚拟宇宙(虚拟宇宙(Virtual Universe) 在 Java3D 中,虚拟宇宙被定义为结合一系列对象的三维空间。虚拟 宇宙被用作最大的聚集体表现单位,同时也可被看作一个数据库。不管 是在物理空间还是逻辑内容,虚拟宇宙都可以很大。实际上在大多数情 况下,一个虚拟宇宙就可以满足一个应用程序所有的需求。 虚拟宇宙是各自独立的个体,原因是在任

31、何时候一个结点对象都不 能在超过一个的虚拟宇宙中存在。同样的,在一个虚拟宇宙中的结点对 象也不能在其他的虚拟宇宙中可见或者与其他的对象结合。 对于一个 Ja va3D 应用程序,必须定义一个虚拟宇宙才可以在这个宇宙中显示三维 图像。 2.2.2 Java3D 的坐标系统的坐标系统 默认情况下,Java3D 的坐标系统是右旋的,用方位语义学来解释就 是:正 y 方向是本地重力的上,正 x 方向是水平的右,正 z 是这对着观 察者的方向。默认的单位是米。 双精度浮点、单精度浮点甚至是定点来 表示的三维坐标都足够来表示和显示丰富的 3D 场景。不幸的是,场景 不是真实世界,更不必说整个宇宙了。如果使

32、用单精度坐标,有可能出 现下列情景: 1. 离原点仅有一百公里的距离,被描绘得相当量子化,所能达到的 最好效果就是三分之一英寸,在实际应用中这样的精度比要求的粗糙的 多。 2. 如果要缩小到一个很小的尺寸(例如表现集成电路的大小),甚 至在离原点很近的地方就会出现同坐标问题。 为了支持一个大型的邻接虚拟宇宙,Java3D 选择了有 256 位的高分 辨率坐标: Java3D 高分辨率坐标由三个 256 位的定点数组成,分别表示 x、y、 z。定点被固定在第 128 位,并且值 1.0 被定义为真实的 1 米。这个坐标 系统足够用来描述一个超过几百万光年距离的宇宙,也可以定义小于一 质子大小(小

33、于一普朗克长度)的对象。 在 Java3D 中,高分辨率坐标仅仅用于将更加传统的浮点坐标系统嵌 入更高分辨率的底层系统。用这种方法,可以创造出一个具有任意大小 和规模的在视觉上无缝的虚拟宇宙,而且可以不必担心数字上的精度。 (参看表 2) 一个 256 位的定点数还具有能够直接表示几乎任何的合理适当的单 精度浮点值。 Java3D 用有符号的、两位补码的 256 位定点数字来表示高分标率坐 标。尽管 Java3D 保持内部高分辨率坐标表示的不透明,但用户用有八个 整型变量的数组来表示 256 位的坐标。Java3D 把数组中从索引号由 0 到 7 分别看作高分辨率坐标的从高到底位上的数。第 1

34、28 位上是二进制的 小数点,也可以说在索引号为 3 和 4 的整数之间。高分辨率坐标的 1.0 就是 1 米。 如果是小的虚拟宇宙(类似于相对比例的几百米),在虚 拟宇宙对象下(0.0,0.0,0.0)点建立一个带有高分辨率坐标的 Locale 作为 根节点就足够使用了;装入程序在装入过程中能自动构建结点,而在高 分辨率坐标下的点不需要任何外部文件的直接描述。 大一些的虚拟宇宙 期待被构建为有如同计算机文件那样的层次,这意味着一个根宇宙要包 含由外部文件引用的嵌入虚拟宇宙。就这样,文件引用的对象(用户指 定的 Java3D 组或高分辨率结点)定义了被读入现存虚拟宇宙的数据的位 置。 Java

35、 3D 高分辨率坐标 2n MetersUnits 87.29Universe (20 billion light years) 69.68Galaxy ( light years) 53.07Light year 43.43Solar system diameter 23.60Earth diameter 10.65Mile 9.97Kilometer 0.00Meter -19.93Micron -33.22Angstrom -115.57Planck length 表表 2:Java 3D 高分辨率坐标高分辨率坐标 2.2.3 场景(场景(Locale) 为了支持大型虚拟宇宙,Java3

36、D 提出了Locale的概念。Locale 把 高分辨率坐标作为起源。把高分辨率坐标看作精确的定位,它在高分辨 率坐标的影响范围之内使用精度较低的浮点坐标指定对象的位置。 一个 Locale 和与它结合的高分辨率坐标一起组成了在虚拟宇宙之下 的一个表现层。所有虚拟宇宙包含一个或多个高分辨率 Locale。而所有 其他的对象都是附加在一个 Locale 上的。在整个体系中,高分辨率坐标 扮演的是上层的仅供翻译的转换结点。例如,附加到一个特定 Locale 的 所有对象的坐标都会与这个 Locale 位置的高分辨率坐标有关。(图 2) 图图 2:高分辨率坐标指定场景:高分辨率坐标指定场景 如果一个

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

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

39、ava3D 的观察模式通过完全分离虚拟和现实世界来实现这 种多功能性。这种模式区分了以下两种情况: 1. 一个应用程序通过控制观察平台的位置和方向在虚拟宇宙中对一 个观察台对象(ViewPlatform)定位、定向和设定比例尺; 2. 渲染器使用已知位置和方向计算出要使用的观察对象,对终端用 户物理环境的描述确定用户在物理环境中的位置和方向。 为什么使用一个新的模式,由于在底层的编程接口中可以找到基于 照相机的观察模式,开发者通过它可以控制所有渲染图的参数。它可以 应付处理常规的应用程序,但是处理有更广阔的适应性的系统的时候就 显得力不从心,这些系统包括:把整个世界作为一个单元装入和显示的 观

40、察器或浏览器、可供终端用户观察、操纵、显示、甚至与虚拟世界交 互的系统。 基于照相机的观察模式仿效在虚拟世界中放置一个照相机而不是一 个人。开发者必须持续重新配置一个照相机来模拟在虚拟世界中有一个 人。Java3D 观察模式直接和跟踪摄像头结合。在有摄像头的情况下,用 户会有好像他们是真实的存在在那个虚拟世界的错觉,而开发者可以不 做任何附加的工作就可以为用户带来这种效果。在没有摄像头并且只是 用来表现一个单一的标准显示的情况下,Java3D 观察模式表现得更像传 统的基于照相机的观察模式,只是加上了能够产生立体透视图的功能。 在一个需要由物理环境规定一些观察参数的系统中,让应用程序来控制 所

41、有的观察参数并不合理。例子就是:一个带有摄像头的显示设备可以 用其光系统直接决定应用程序中的观察领域。不同的设备有不同的光系 统,程序开发者硬绑定这样的参数或允许终端用户改变这样的参数都是 不合理的。另外一个例子是:一个可以由用户当前的头部位置自动计算 出观察参数的系统。只有一个对世界的说明和一条预先定义的轨迹可能 不会严密的定义一个终端对象的观察。对于有摄像头设备用户,他们可 能会期待在沿着一条固定的路线前进的时候能够看到他们左右两旁的物 体。就好像在一个游乐场中,游客乘坐观光车按照固定的路线参观游乐 场,但是在这过程中,游客可以持续转动他们的头。 由于依靠终端用户的具体物理环境,观察的各个

42、参数,尤其是观察和投影的基 体变化很大。影响观察和投影基体的因素包括显示设备的物理尺寸,显示设备的安 装方法(在用户的桌面或用户的头顶上),计算机是否知道用户的头在三维空间的 位置,头顶装置真实的观察领域,显示设备上每平方英寸的像素数,还有其他类似 的参数。Java3D 建立的观察模式完全可以满足上述所有的需求。 2.3.2 Java3D 中用来定义观察的对象中用来定义观察的对象 Java3D 通过几个对象来发布它的观察模式。特别是 View 对象和与 它相关的组件对象: PhysicalBody 对象、PhysicalEnvironment 对象、C anvas3D 对象、Screen3D

43、对象。图 3 描述了 View 对象的中心角色和组件 对象的辅助角色。 观察有关的对象都在图 3 中,它们起的作用如下: ViewPlatform(观察平台):一个 view 用一个叶子结点来在场景图 为自己定位。观察平台的起始结点指定了它的位置、方向和在虚拟世界 中的比例尺。 View(观察):主要的观察对象包含了很多观察的状态。 Canvas3D:抽象窗口工具箱中画布对象的 3D 版本。它描绘了一个 可以让 Java3D 在上面画图像的窗口。它包括了一个对 Screen3D 对象的 引用和描述一个 Canvas3D 要用到的尺寸、形状和位置信息。 Screen3D:一个包含描述显示荧屏物理

44、属性信息的对象。Java3D 把 显示荧屏信息分别放在单独的对象中,这样做可以防止在每一个 Canvas 3D 对象中不同的显示屏幕信息共享一个屏幕。 PhysicalBody:一个包含刻度信息的对象,它描述了用户的物理身体 。 PhysicalEnvironment:一个包含刻度信息的对象,它描述了物理世界 。主要的信息描述了环境的六自由度硬件。 图图 3:View 和它的组件对象以及它们的相互联系和它的组件对象以及它们的相互联系 这些对象一起描述观察的几何体胜于明白的提供观察或投影基体。J ava3D 的表现工具用这个信息来构造适合的观察和投影基体。这些观察 对象的几何中心为产生一个观察提

45、供了更大的弹性,这种弹性需要支持 可以选择的显示配置。 ViewPlatform: 在虚拟世界中的位置 一个 ViewPlatform 结点定义了 一个坐标系统。这样,在虚拟世界中就有了一个有原点或参考点的参考 系。观察平台是一个附加在观察对象的点并且作为决定描绘工具观察的 基础。图 4 表示了一个场景图的一部分,它包括一个观察平台结点。直 接在观察平台之上的结点决定了它在虚拟世界中的位置和方向。应用程 序和行为通过修改直接在观察平台之上任何与 TransformGroup 结点结合 的 Tramsform3D 对象可以在虚拟世界中任意移动 ViewPlatform。一个简 单的应用程序可能直

46、接在一个观察平台上定义一个 TransformGroup 结点 。一个虚拟宇宙可能有很多不同的观察平台,但是一个特定的 View 对 象只能附加于一个单一的观察平台之上。这样,每个画在 Canvas3D 上 的图画都是从一个单一的观察平台开始。 图图 4:包含观察平台的一部分场景图:包含观察平台的一部分场景图 2.3.3 在三维世界中建立、移动观察点在三维世界中建立、移动观察点 应用程序通过修改观察平台的上级 TransformGroup 在虚拟世界中航 行。修改一个观察平台的位置和方向的应用程序的例子包括:浏览器、 提供航行控制的阅读器、做建筑预设计的程序、甚至是搜寻和毁坏游戏 。 控制观察

47、平台对象能产生很有趣和有用的结果。我可以定义一个简 单的场景图,这个程序的目的是在窗口的正中画了一个对象并且绕自己 的中心转动。不管在中心的对象,而让 ViewPlatform 在虚拟世界中绕圈 。如果形体结点包括一个地球模型,这个程序可能产生一个类似于绕地 球的远航员观察对象。如果在这个世界中加入更多的对象,这个场景图 允许经由行为结点来浏览整个虚拟世界。 图图 5:一个由观察控制的简单场景图:一个由观察控制的简单场景图 应用程序和动作通过 TransformGroup 的可访问方法操纵它。这些方 法允许应用程序得到和设置组结点的 Transform3D 对象。Transform3D 结 点

48、有 setTransform 和 getTransform 两个方法。 形体移动的实现向来都是三维实现的难点和复杂之处,传统三维技 术的实现多是注重模拟三维物体的真实移动。而 Java3D 除了提供传统的 方案,还可以在一个存在的三维世界中移动一个观察点,借助观察点的 移动模拟物体的移动。如同物理所学的切割磁力线发电,转子和静子本 来就是一对可以互逆的对象,结果都是把动能转化为电能。例 2 的代码 显示了在 Virtual Universe 中建立 Viewer、ViewPlatForm、和如何通过绑 定 OrbitBehavior 实现移动 ViewPlatform。 2.3.4 Java3

49、D 的网络基础的网络基础 将 Java3D 与 Java 平台技术的结合。Java3D 可以很容易的与 Java 平 台的其他技术相结合,如 Applet、JSP、Serverlet、JDBC、EJB 等。100%的 纯 Java 实现是 Java3D 可以与如此多的 Java 平台技术结合的根本原因: 1. 同是 Java 平台保证 Java3D 可以在 Applet 中实现; 2. Applet 使 Java3D 可以轻易的在网页中显示; 3. JSP、Serverlet 技术保证将动态网页技术用于 Java3D 显示; 4. Serverlet 本身就是 J2EE 平台的核心技术,这使得

50、 Java3D 可以搭 建于 J2EE 平台。更可以使用所有 J2EE 的其他技术:JDBC、EJB、JMS 第三章第三章 实现实现 JAVA3D 结构体系的方法结构体系的方法 3.1 总体设计总体设计 设计思想是:以 JAVA3D 为平台,使用 JBuilder 编译器,生成一个三维小场 景,实现简单实体建模,物体运动,场景移动,各种灯光,雾等场景变换操作以及 更换背景图片增加背景音乐等三维体系的基本功能。 3.2 基本形体的生成基本形体的生成 和 VRML 不同,JAVA3D 没有基本形体类,因而在程序中无法直接 生成大量应用的基本形体,如 BOX、CONE、SPHERE 等。我们可以通

51、过复杂的编程生成这些基本形体,也可以直接调用 JAVA3D 为我们提供 的 geometry classes,利用它生成程序所需要的 BOX、COLORCUBE、C ONE、SPHERE、CYLINDER。下面是这些基本体的生成方法。 3.2.1 平板的生成平板的生成 UTILITY 里 BOX 的构造函数有: 1.Box():成一个各边尺寸均为 2 的 BOX,要说明的是, BOX、COLORCUBE、SPHERE 的坐标原点均在其中心点, CONE、CYLINDER 的则在其轴线的中点上。 2. Box(float xdim, float ydim, Appearance ap) :成一个

52、给定尺寸、给 定外观属性的 BOX ,例 Box(.5f, .6f, .4f, myApp) 3. Box(float xdim, float ydim, float zdim, int primflags, Appearance ap) :生成一个有特定说明的 BOX,例如:Box(.4f,.6f,.3f,Primitive.ENABLE _APPEARANCE_MODIFY, ap)表示程序在运行时可以改变其外观属性。 3.2.2 立方体的生成立方体的生成 UTILITY 里 COLORCUBE 的构造函数有: 1. ColorCube() 生成一个边长均为 2 的 COLORCUBE 1

53、. ColorCube(double scale) 将边长均为 2 的 COLORCUBE 按比例放大缩小。 3.2.3 圆锥的生成圆锥的生成 UTILITY 里 CONE 的构造函数有: 1. public Cone() 生成一个底半径为 1,高为 2 的 CONE。 2. Cone (float radius, float height) 3. Cone (float radius, float height, int primflags, Appearance ap) 4. Cone(float radius, float height, int primflags, int xdivi

54、sion, int ydivis ion, Appearance ap) 这里,xdivision、ydivision 可用来表示圆锥的显示是高精度的显示 ,或是底精度的显示,缺省时的中等精度时 xdivision = 15; ydivision = 1; 我们可利用这两个参数来改变显示的效果,使显示圆锥的三角片更多或 更少些。 3.2.4 球体的生成球体的生成 UTILITY 里 SPHERE 的构造函数有: 1. Sphere() 生成一个半径为 1 的 SPHERE。 2. Sphere (float radius) 3. Sphere (float radius, Appearance

55、 ap) 4. Sphere(float radius, int primflags, Appearance ap) 5. Sphere(float radius, int primflags, int divisions) 6. Sphere(float radius, int primflags, int divisions, Appearance ap) 这里,divisions 的作用和圆锥的 xdivision、ydivision 相似。 3.2.5.圆柱体的生成圆柱体的生成 UTILITY 里 CYLINDER 的构造函数有: 1. Cylinder() 生成一个底半径为 1,高为

56、 2 的 CYLINDER。 2. Cylinder (float radius, float height) 3. Cylinder (float radius, float height, Appearance ap) 4. Cylinder (float radius, float height, int primflags, Appearance ap) 5. Cylinder(float radius, float height, int primflags, int xdivision, int ydivision, Appearance ap) 3.3 点、线、面的生成点、线、面

57、的生成 3.3.1 点的生成点的生成 编写 JAVA3D 程序实际上是编写一个特定的场景图,给出了场景图 中带有形体及其属性的一个分支(BranchGroup)和表示观察位置等数据 的另一个分支(View Platform)。一般来说,表示观测位置的分支可以 用 JAVA3D 的 UTILITY 来完成,即 createSceneGraph 方法的定义。 在这个方法里,程序先定义了一个分支 objRoot,然后用数组的形式 定义了顶点坐标 vert 和颜色 color,再用 PointArray 定义了一组点 point ,并将顶点坐标及颜色赋值给 point,由于 JAVA3D 中的 Poi

58、ntArray 点是 Shape3D 的子类,它不能直接放入一个 BranchGroup,因而我们还要先定 义一个 Shape3D 对象 shape,再将 point 赋予 shape,这样 point 就可以放 入 BranchGroup 类型的对象 objRoot 中了。 JAVA3D 提供的 API 中,可用于生成 Point 的对象有: PointArray Ind exedPointArray 1. PointArray PointArray 的构造函数为: PointArray( int vertexCount, int vertexFormat );这里,vertexCount

59、表示 应生成的点的数目,vertexFormat 表示所需要的顶点的格式。 点、线、面几何体所需要的顶点的格式有: COORDINATES 顶点坐标数组 NORMALS 顶点法向数组 COLOR_3 不带 alpha 值的颜色数组 COLOR_4 带 alpha 值的颜色数组 TEXTURE_COORDINATE_2 二维纹理坐标数组 TEXTURE_COORDINATE_3 三维纹理坐标数组 2. IndexedPointArray IndexedPointArray 的构造函数为: IndexedPointArray( int vertexCount, int vertexFormat,i

60、nt indexCount ); 利用本函数,我们可以从众多的点中,选择特定的点来显示。这里 ,vertexCount 表示顶点坐标数组所提供的点的总个数,indexCount 表示 最终应生成的点的个数。JAVA3D 可以生成任意大小的点,并且可以使 点为方点或圆点。 3.3.2 直线的生成直线的生成 利用 JAVA3D 的一些对象,生成各种直线。可以生成直线的对象有 : 1. LineArray 2. LineStripArray 3. IndexedLineArray 4. IndexedLineStripArray 我们可以根据各种不同的情况,生成不同的直线,如给定宽度的直 线、虚线等

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论