Java3D实现三维显示

合集下载

基于JAVA3D的数据结构可视化技术研究

基于JAVA3D的数据结构可视化技术研究
L c l上现
基于Jv 3 a a D的数 据 结 构 可 视 化 的一 般 设 计 方 法如 图 1
所 示。
据结构 ( 如: 图中有树 ,树 中有图等 )对于这 些数据结构
是 需 要特 定 的 可 视 化 算 法 来 实 现 。 数 据 结 构 可 视 化 最 重 要 的 作 用 是 用 在 教 学 上 , 通 过
数 据 库 。不 管是 在 物 理 空 间 还 是 逻 辑 内容 , 虚 拟 宇 宙 都 可 以很 大 。一 个 L c lg 与 它 结 合 的高 分 辨 率 坐 标 一 起 组 成 o ae E ]
了在虚拟宇 宙之 下的一个表现层 。所 有虚 拟宇宙包含一个 或多个高分辨率 L c l,所有其他的对象都是 附加 在一个 o ae
3 J a av 3D
Jv 3 a a D由于其 简单易学 而备受三维 编程者 的欢迎 。
3 D技 术 是 底 层 的显 示 技 术 , J v 3 提 供 了基 于 J v 的 上 aa D aa 层 接 口。J v 3 B e GL ̄Di cX 些 底 层 技 术 包 装 a a D} Op n Yl r t 这 : l e 在 J v 接 口中 。J v 3 aa a a D技 术 强 大 的扩 展 性 使 得 J v 3 也 aa D 可 以 编 写 非 常 复 杂 的应 用 程 序 , 用 于 各 种 领 域 如 VR ( 虚 拟 现 实 )等 。 Jv3 a a D实 际 上 是J v 语 言 在 三 维 图形 领 域 的扩 展 , aa 与JV 一样,J v 3 aa a a D有纯 粹 的 面 向对 象 结 构 。J v 3 a a D的 数 据 结 构 采 用 的 是 S e eGr p sSrcue ( 景 图 ), c n a h tu tr 场 就 是 一 些 具 有 方 向 性 的 不 对称 图形 组 成 的 树 状 结 构 。 对 于 J v 3 至 少 需 要 了 解 3 概 念 : 虚 拟 宇 宙 ( ru l aa D 个 Vi a t Unv e) 、 场 景 ( o ae) 、 坐 标 系 统 。在 J v 3 ie s r L cl aa D 中 , 虚 拟 宇 宙 被 定 义 为 结 合 一 系列 对 象 的 三 维 空 间 。虚 拟 初 始 化J v 3 a a D世 界 包 括 创 建 画 布 、创 建 有 效 三 维

Java3D文档信息的可视化

Java3D文档信息的可视化

Jv 3 文档信 息 的 可视 化 aa D
王 非 ,赵强 ,唐 定 勇
( 西南 科 技大 学 计 算 机科 学学 院 , 四川 绵 阳 6 1 1) 2 0 0 摘要 : 利用 Jv3 进 行 文档信 息三 维可视 化 ,其 场景 图可 含 多个 场 所 节点 。每 个 节点拥 有 一 到 多个 分 支节 点 , a aD 在 其下 面建 立一 个基 准 坐标 系 ,便 可相 对 谊 坐标 系摆放 所 需 形体 或其 他转 换 节点 ,构 造 出复 的 物体 。构 造三 维 场景
文档信息可视化将 文档数据信息和 知识 转化 为 视觉形式 ,从而可发现 隐藏 在信息 内部 的特 征和规 律…。典型的文档信息可视化模 型如 图 1 。
3 Jv 3 实现 三维 可 视 化 aaD
31 a a D 特 点 .Jv 3
Jv 3 a aD把 O e G pn L和 D rc i t e X底层 技术包装在 Jv a a接 口中。使 3 技术 变得不 再繁琐且可加入 到 D
Jv3 aaD应用程序须先创建一个虚拟空间对象并且至少把一个场所对 象附加之 上,再构建 出所需场景 图像 。 关键词:文档信息;三维可视化;Jv 3 ;虚拟 空间 aaD 中 圈分类 号 :T 32 T 372 文 献标 识码 #A P 1 ; P 1.
Viu l ai n o x c me t n o m ai n o a a D s a i to fTe t z Do u n sI f r to n J v 3
维普资讯
^ 工 ●. 化 I .
软件技m
S fwa eT c nq e o t r e h iu
O. . t ma i n I Au o to 2 0 。 o . 5 No 4 0 6 V 12 , .

Java3D总结

Java3D总结

Java3D介绍Java3d是适应与internet 环境下开发的三维图形开发包,它针对底层库openGL 和DirectX 的封装。

这样使得他们摆脱了单机三维束缚,面向与网络方向。

OpenGL :图形编程库。

(如坐标的变化,基本形体,关照效果等)DirectX :微软公司三维库传统下的Internet 图形处理,数据不是从本地硬盘中读取,运行环境也不是事先安装好的,如果用OpenGL 等传统的可视手段,只能在Web服务器端生成图像,在发到客户端显示。

但是当前的网络传输能力是不可能满足的。

(但是java3的是传输的不是图像本生,而是三维图像生成的程序和数据)当前下的Java3d是这样的:java3d是基于OpenGL或DirectX底层的API。

他和java 一样需要安装,jre(java虚拟机)一次编程,跨平台运行。

所以说他很好的运用了pc机的硬件加速器。

(当前我们现在用的是WebStart来下载java3d程序,他保证了如果服务器端没有升级变化时,只需要下载一次,以后就可以直接运行)。

Java3d 本质是一个交互式三维图形应用编程接口(api),他可以和java2d,swing,awt 结合。

其目标是:让用户在浏览器中观看或操作三维动画图形。

一次编程,到处运行。

适应不同的软件平台。

适应各种显示环境和输入设备。

Java3d的编程思想Java3d编程的空间采用场景图结构,是一种有向无环图。

如图:locale下有一到多个branchgroup节点,在他下有一个基准坐标系transformgroup,就可以相对此坐标系摆放所需的形体(shape3d)也可以给出形体的外观appearance及geometry。

所以:他就是将许多对象安放在这个虚拟空间的过程,在设置各个方面的属性,如:形状,位置,外观,贴图,透明效果等;再在三维环境下设置灯光,雾,背景,声音等。

最后定义我们自己的观察角度,最终达到效果。

java开发assimp案例

java开发assimp案例

java开发assimp案例在当今的软件开发领域,Java作为一种广泛应用的编程语言,被众多开发者所喜爱和采用。

而Assimp,全称为Open Asset Import Library,是一个功能强大的开源库,用于读取和处理三维模型文件。

在本文中,我们将探讨Java开发中使用Assimp的案例,并且展示如何利用该库来处理三维模型文件。

一、Assimp简介及安装Assimp是一个跨平台的库,可以在多个操作系统上运行,如Windows、Linux和Mac OS。

它支持多种格式的三维模型文件,包括常见的3DS、FBX、OBJ等。

在Java开发中使用Assimp之前,我们首先需要安装Assimp库。

安装步骤如下:1. 下载Assimp库文件,并解压缩到任意目录。

2. 在Java项目中添加Assimp库的依赖。

可以通过Maven或手动导入jar文件的方式添加依赖。

3. 配置环境变量,将Assimp库所在目录添加到系统的PATH变量中。

安装完成后,我们就可以开始使用Assimp库进行Java开发了。

二、使用Assimp加载模型文件Assimp库提供了一系列的API,可以方便地加载和处理三维模型文件。

下面是一个简单的Java代码示例,展示了如何使用Assimp加载一个模型文件:```javaimport assimp.*;public class ModelLoader {public static void main(String[] args) {// 创建一个Assimp对象Assimp ai = new Assimp();// 加载模型文件AIScene scene = ai.aiImportFile("model.obj",ai.aiProcess_Triangulate);// 检查模型文件加载是否成功if (scene != null) {// 处理模型数据// ...// 释放资源ai.aiReleaseImport(scene);} else {System.out.println("模型文件加载失败!");}}}```上述代码中,我们首先创建了一个Assimp对象,然后使用`aiImportFile`方法加载模型文件,该方法接受两个参数:模型文件的路径和加载选项。

计算机图形学实验-实验七--三维立方体的旋转

计算机图形学实验-实验七--三维立方体的旋转

贵州大学实验报告
学院:计算机科学与信息学院专业:软件工程班级: 102班姓名学号实验组实验时间指导教师成绩实验项目名称实验七三维立方体的旋转

验目的了解并掌握三维立方体的绘制和显示并通过按键控制其旋转,每次旋转150

验要求根据本实验的特点、要求和具体条件,了解并掌握三维立方体的绘制和显示,并通过按键控制其旋转,每次旋转150,成功编写测试代码进行实验。

绘制一个三维立方体。

实验原理Java3D
在java3D中坐标轴的显示如下所示:Java3D的编程思想显示如下:。

java3D

java3D

Java3d整理Java3d基础环境配置1.1安装JDK1.2安装官网下载最新版本简单实例2.1新建java项目2.2导入基本jar包,jar包下载2.3编写代码package measoft.java3d.base;import java.applet.Applet;import java.awt.BorderLayout;import java.awt.GraphicsConfiguration;import javax.media.j3d.Appearance;import javax.media.j3d.Background;import javax.media.j3d.BoundingSphere;import javax.media.j3d.BranchGroup;import javax.media.j3d.Canvas3D;import javax.media.j3d.DirectionalLight;import javax.media.j3d.Material;import javax.media.j3d.TransformGroup;import javax.vecmath.Color3f;import javax.vecmath.Point3d;import javax.vecmath.Vector3f;import com.sun.j3d.utils.applet.MainFrame;import com.sun.j3d.utils.geometry.Cone;import com.sun.j3d.utils.universe.SimpleUniverse; /*** 使用了SimpleUniverse对象,使得基本步骤比较简单:* 1.创建一个Canvas3D对象。

* 2.创建并定制一个SimpleUniverse对象,该对象引用前一步创建的Canvas3D对象* 3.构建内容子图* 4.编译内容子图* 5.将内容子图插入SimpleUniverse的Locale中*** @author J_nan**/publicclass MyCone extends Applet {public BranchGroupcreateSceneGroup(){/*** 一、 1.创建一个包含对象的数据结构2.生成坐标系3.将坐标系添加到跟节点上4.设置场景的有效范围*/BranchGroupobjRoot = new BranchGroup();TransformGroupobjTrans = new TransformGroup();objRoot.addChild(objTrans);BoundingSphere bounds = new BoundingSphere(newPoint3d(0.0,0.0,0.0),100.0);/*** 二、1. 创建背景颜色 2.设置背景边界 3.添加背景到场景中*/Color3f bgColor = new Color3f(0.0f,0.0f,0.0f);Background bg = new Background(bgColor);bg.setApplicationBounds(bounds);objRoot.addChild(bg);/*** 三、1. 添加平行光 2.给指定的bounds设定光的范围界限*/Color3f directionalLightColor = new Color3f(1.f,1.f,1.f);Vector3f vec = new Vector3f(0.f,0.f,-1.0f);DirectionalLightdirectionalLight =new DirectionalLight(directionalLightColor,vec);directionalLight.setInfluencingBounds(bounds);objRoot.addChild(directionalLight);/*** 四、1.设置外观 2.设置材料 3.生成基本圆锥*/Appearance app = new Appearance();Material material = new Material();material.setDiffuseColor(new Color3f(10.f,1.0f,0.0f));app.setMaterial(material);Cone cone = new Cone(.5f,1.0f,1,app);objRoot.addChild(cone);/*** 五、返回objRoot*/return objRoot;}public MyCone(){setLayout(new BorderLayout());GraphicsConfigurationconfig =SimpleUniverse.getPreferredConfiguration();/*** 第一步:Canvas3D类提供了一个3D渲染绘图画布,构造并初始化一个新的Canvas3D对象*/Canvas3D c = new Canvas3D(config);/*** 第二步:创建虚拟空间*/SimpleUniverse u = new SimpleUniverse(c);/*** 第三步:构建内容子图*/BranchGroup scene = createSceneGroup();/*** 第四步:编译内容子图*/pile();/*** 第五步:将内容子图插入SimpleUniverse的Locale中*/u.addBranchGraph(scene);add("Center",c);//安放观察点u.getViewingPlatform().setNominalViewingTransform();}publicstaticvoid main(String[] args) {new MainFrame(new MyCone(),400,300);}}运行效果如图:编写JAVA3D程序的一般步骤:A.SceneGraphObject的子类是构建场景图的基石。

基于Java3D的坦克游戏的设计和实现


Gemc y r y的子 类或孙 类 , o tAr r a 凶而 都继 承 了它所有 的方 法 。 形体 ” 。因此 , 用Jv3 利 aa D设 计一个具有瓦动性的坦 克射击游 Jv3 aa D程 序 中的面有多个 属性 , 可通过 P 1g n t ue 对象 oy 0 A t ts 戏, 对于三维技术的探索和研究 , 具有实际意义 设 定具 体 的属 性 。
De i a d sgn n Re l a i o a i ton f Tan Game z k Ba e o J va s d n a 3D
YI W a — h n nce g
(co lo nomain E gneig atC iaIstt o eh o g, F zo,Jag i3 4 0 ,C ia Sho f I r t nier ,E s hn ntu Tcnl ) uhu inx 4 0 0 hn ) f o n i ef o
e p rme t r v h t t e a h s g o n e a tv t n i u l e f c . x e i n s p o e t a h g me a o d i t r c i i a d v s a fe t y
Ke r s t r e i nso v so y wo d : h e d me i n ii n; J v 3 ;t n g me; i t r c i i aa D ak a n e a tv t v s a e e t y; iu l f c
占到 了 重 要 的 地 位 , 应 用 在 三 维 动 画 、 维 游 戏 、 械 C D 可 三 机 A
外部其他格式 的三维 图形文件 , 生成复杂的三维形体对象 。
fJ面 的 生成 】

基于JavaJava+3D的地层3维建模与可视化

[!] 形 ( !16%& ;G %F) 建模为基础的 ! 维技术 。
随着计算 机 硬 件 和 0 T3F. I 、 1DR3O4C 等 技 术 的不断进步, 地学 ! 维 可 视 化 研 究 取 得 了 很 多 重 大的成果, 并 在 生 产 实 践 中 获 得 了 应 用。 目 前 常 见的系统普遍 只 能 在 单 机 平 台 运 行, 或者只能在 网络上发布简单的图片, 不具有交互性和实时性; 在 2F43RF34 网 络 环 境 下 实 现 远 程、 实时交互的 ! 维可视化系统, 技术仍不成熟, 但目前已经有许多 学者致力于这 方 面 的 研 究, 如加拿大卡尔加里大 学陶 闯 博 士 利 用 Z:S: ] Z:S: !1 技 术 开 发 的 .3%= / ; 3 !1
!
数据来源与数据预处理
本文研究的数据来源于某地区地下水资源调
查评价中实际 勘 测 的 地 质 钻 孔 数 据, 其数据格式 为武汉中地公司 ) $/ D>6 的离散 ?63 ! 明码格式
[ GG ] 数据 。
! "#
数据格式
) $/ D>6 离散 ?63 ! 格式数据 文 件 的 数 据 格 式如下: !, " G ,# G , $ G , % G … … " & ,# & , $ & , % & … … " ! ,# ! , $ ! , % ! 其中, ! 为 数 据 点 的 总 数; " & , #& , $ & 分 别 为 第 & 个数据点的坐标值; %& 为第 & 个数据点的专业值 (即地层的类型, 一般用整数表示, 如 GA 代表亚粘
以某地区地下水资源调查评价中采集的地质钻孔数 据 为 例, 验 证 该 系 统 的 有 效 性。 该 系 统 将 不 仅 为 地 下 水 模 型的 ! 维实体建模提供理论支持, 而且将推动 M3X.28 在地下水模型中的应用。 关键词: 地层; 可视化 Z:S:; Z:S: !1 ; ! 维建模;

java3d官方教程

Java 3D API官方教程[翻译一]开始学习Java3D API1第一章、入门本章目标:学习了本章之后,你能:•能用一些基本术语解释什么是Java3D•能描述出Java3D程序的基本结构。

•能识别出Java3D API中的许多类。

•能编写出简单的Java3D动画程序。

Java 3D API是一个用于编写显示和交互操作三维图形对象的程序的接口。

Java 3D也是在Java2 Java开发包(JDK)上的标准扩展。

这个API提供了用于创建和操纵3D图形的高端构成方法以及渲染该图形的一些数据结构。

Java3D 提供了创建图片、可视化、动画以及3D交互图形应用程序的函数。

1.1 什么是Java 3D API?Javae 3D API是作为复杂三维图形和声音渲染系统的接口的一系列层次的JAVA类的统称。

程序员可以用Java3D开发创建和操纵3D图形对象的高端应用。

这个图形对象处于一个被渲染了的虚拟世界(Virtual Universe)中。

这个API就是用设计来用于灵活方便地创建精确的各种大小的虚拟环境,可以大到大空物体,小到比原子还小。

除了这些功能之外,API的使用也很直接,API能自动处理渲染的细节,由于利用了Java线程机制的优势,所以Java3D的渲染器的工作是并行进行的。

并且渲染器也能自动地优化并提高渲染性能。

一个Java3D程序创建了Java3D对象的实际,并将其置之于场景图数据结构中。

在这个场景图中,所有3D对象用完全指定了虚拟世界内容和其如何被渲染的树形结构存储,Java3D程序能写成能独立运行的应用程序,或者写成能嵌入在浏览器中运行的Applets,或者二者兼备。

1.2 Java 3D API每一个Java3D程序至少部分地集成了来自Java类层次中的对象,这些对象的集合称做虚拟世界(virtual universe),这就是将要被渲染的对象。

此API在javax.media.j3d包中定义了超过100多个类,这些类我们平常称做Java3D 核心类。

基于开源Web 3D引擎的三维系统的开发

基于开源Web 3D引擎的三维系统的开发摘要:应用Web3D引擎开发的计算机仿真系统或虚拟现实系统均需在Web浏览器上运行,需要其能快速下载和运行,并且尽量不需下载特定插件。

采用基于JA V A技术的开源Web3D引擎开发的三维系统可以满足上述要求,开发的展示系统可以实现三维图形的旋转、缩放等交互功能。

此外,在系统开发过程中对引擎中不完善的部分进行了必要的修正。

关键词:计算机应用;Web3D引擎;三维系统;交互;JA V A 技术本文提出了基于开源代码的Web3D引擎,开发交互式产品展示系统的方法,并以陶瓷产品为例,开发了一款基于开源Web3D引擎idx3D,具有交互功能的三维陶瓷产品展示系统,该系统的运行无需下载特定的插件。

1开发步骤根据Web3D引擎idx3D中经修改后的各类的属性和方法,总结了以下的开发步骤:(1)为所开发的系统建模。

系统需要先建立模型,才能对相应对象进行交互式处理。

由于idx3D引擎中没有建模的功能,需要借助其他建模工具实现建模。

(2)构造场景。

系统中,摄像机、光源以及物体等各类对象都要置于场景中予以管理和操作,因此首先要构造场景。

(3)加入材质和灯光。

在场景中需要加入相应的材质和灯光。

(4)将模型文件导入程序中。

导入的物体模型添加到场景中。

(5)重构场景,以及场景规格化。

由于场景中添加了材质、灯光以及物体模型等内容,需要将这些对象重构成新的场景,并对场景进行规格化操作。

(6)初始化渲染状态。

对重构后的场景进行渲染,此时是静止状态,并没有交互式的操作。

(7)设置旋转和缩放矩阵,实现旋转和缩放。

对步骤(6)的场景进行旋转和缩放的交互式操作的实现。

(8)进行渲染得到具有三维效果的交互式系统。

将步骤(7)所完成的能缩放和旋转的场景进行渲染最终实现交互式三维展示系统。

2应用案例开发2.1开发系统的简介应用基于JA V A技术的Web3D开源引擎idx3D,开发了一款陶瓷产品——茶壶的三维展示系统。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Java3D用其自己定义的场景图和观察模式等技术构造了3D的上层结构,实现了在Java平台使用三维技术。

本文在原理上着重介绍Java3D特有的两个重要概念:场景图(Scene Graph)、观察模式(View Model)。

在接口使用上的介绍分为两部分:实例说明如何使用Java3D接口;说明如何将Java3D技术与Java原有的Web技术(JSP、Serverlet)相结合,在网页上实现三维显示。

关于Java3D1.1 Java3D简介Java3D API是Sun定义的用于实现3D显示的接口。

3D技术是底层的显示技术,Java3D提供了基于Java的上层接口。

Java3D把OpenGL和DirectX这些底层技术包装在Java接口中。

这种全新的设计使3D技术变得不再繁琐并且可以加入到J2SE、J2EE的整套架构,这些特性保证了Java3D技术强大的扩展性。

JAVA3D建立在JAVA2(JAVA1.2)基础之上,JAVA语言的简单性使JAVA3D的推广有了可能。

它实现了以下三维显示能够用到的功能:∙生成简单或复杂的形体(也可以调用现有的三维形体)∙使形体具有颜色、透明效果、贴图。

∙在三维环境中生成灯光、移动灯光。

∙具有行为的处理判断能力(键盘、鼠标、定时等)。

∙生成雾、背景、声音。

∙使形体变形、移动、生成三维动画。

∙编写非常复杂的应用程序,用于各种领域如VR(虚拟现实)。

J2SE在其标准开发包中并不提供Java3D的API,Java3D是一个独立的可选组件,可以单独下载。

Java3D现在(截止到2003年5月)提供的正式版本是1.3.0,可以在/products/java-media/3D/download.html 下载该开发工具包。

Java3D 1.3有7个不同的可下载版本:Java3D for Windows(DirectX version)SDK for JDK(include Runtime);Java3D for Windows(OpenGL version)SDK for JDK(include Runtime);Java3D for Solaris/SPARC Runtime for JDK(include Runtime);Java3D for Windows(DirectX version)Runtime for JRE;Java3D for Windows(OpenGL version)Runtime for JRE;Java3D for Solaris/SPARC SDK for JRE;Java3D for Solaris Runtime 64 bit support;其中前三个版本是开发包。

第4、5、6个版本是Java3D运行期支持程序包。

最后一个是支持Solaris 64 bit操作平台运行Java3D的程序包。

前三个的开发包包含了各自对应的运行期支持包。

Java语言本身具有跨平台特性,无论使用上述哪个版本的开发包,概念和实现代码都会保持完全一致。

这里我们使用Java3D for Windows(OpenGL version)SDK for JDK(include Runtime);版本作为我们讨论、实现Java3D的工具包。

注意在安装此版本SDK前要保证下列环境:Java 2 (Runtime or SDK) version 1.3.1 或更后的版本OpenGL 1.1 或更后的版本,并且是Microsoft支持的显卡厂商Windows NT 4.0 only: Service Pack 3 或更后的版本(Window2000、WindowXP)1.2 Java3D与其他三维技术的比较JAVA3D可应用在三维动画、三维游戏、机械CAD等多个领域。

但作为三维显示实现技术,它并不是唯一选择而且是一个新面孔。

在Java3D之前已经存在很多三维技术,这些三维技术在实现的技术、使用的语言以及适用的情况上各有不同,我们主要介绍与Java3D 又密切关系的三种技术:OpenGL、DIRECT3D、VRMLOpenGL是业界最为流行也是支持最广泛的一个底层3D技术,几乎所有的显卡厂商都在底层实现了对OpenGL的支持和优化。

OpenGL同时也定义了一系列接口用于编程实现三维应用程序,但是这些接口使用C(C++)语言实现并且很复杂。

掌握针对OpenGL 的编程技术需要花费大量时间精力。

DIRECT3D是Microsoft公司推出的三维图形编程API,它主要应用于三维游戏的编程。

众多优秀的三维游戏都是由这个接口实现。

与OpenGL一样,Direct3D的实现主要使用C++语言。

VRML2.0(VRML97)自1997年12月正式成为国际标准之后,在网络上得到了广泛的应用,这是一种比BASIC、JAVASCRIPT等还要简单的语言。

脚本化的语句可以编写三维动画片、三维游戏、计算机三维辅助教学。

它最大的优势在于可以嵌在网页中显示,但这种简单的语言功能较弱(如目前没有形体之间的碰撞检查功能),与JAVA 语言等其它高级语言的连接较难掌握,因而逐渐被淹没在竞争激烈的网络三维技术中。

表1是Java3D 与其它三维技术的比较图,可以从中直观的看出他们相互间的区别: 表1:3D 技术对招表技术 实现层次 开发技术(难度) 扩展性 最适合应用领域Java3D 中层(JVM ) Java (较易) J2SE 标准扩展(好) 网上三维显示实现…OpenGL 底层(显卡) C\C++(难) 各大厂商支持(较好)三维设计软件… Direct3D 底层(操作系统) C++(较难) Windows 平台(差) 三维游戏…VRML 上层(网页) 标记语言(容易) 安装插件支持(一般)网上虚拟现实… Java3D 的场景图结构Java3D 实际上是Java 语言在三维图形领域的扩展,与Java 一样,Java3D 有纯粹的面向对象结构。

Java3D 的数据结构采用的是Scene Graphs Structure (场景图),就是一些具有方向性的不对称图形组成的树状结构(图1)。

我们在一个Java3D 应用程序看到的逼真三维场景从程序的角度看来,实际就是由Java3D 定义的一系列的对象,这些对象不是杂乱无序,对象之间也不是毫无关系。

如果想让三维图像正常显示,必须在这两点上遵循Java3D 场景图的规定。

观察图1,Java3D 场景图的树结构由各种各样的对象组成:在图中出现的这些对象都实现了Java3D 中有重要的意义的类,从逻辑上我们将它们分为三类:∙根节点(Root ):Virtual Universe Object ∙ 节点(Node ):Local Object 、Branch Group Nodes 、Behavior Node 、Shape3DNode…∙ 叶子节点(Leaf ):Appearance 、Geomery..图1:在应用中的Java3D 场景图场景图中线和线的交汇点称为节点(Node),这些节点都是Java3D类的实例(Instance of Class),节点之间的线表示各个实例之间的关系。

∙Virtual Universe是根节点,每一个场景图的Virtual Universe是唯一的。

∙在Virtual Universe下面是Locale节点,每个程序可以有一个或多个Locale,但同时只能有一个Locale处于显示状态,就好象一个三维世界非常大,有很多个景点,但我们同时只能在一个景点进行观察。

Java3D允许从一个Locale跳到另一个Locale,不过绝大多数程序只有一个Locale。

∙每一个Locale可以拥有多个BranchGroup节点。

所有三维形体的其位置信息(Transform Group Nodes)都建立在BranchGroup节点之上。

∙TransformGroup Node用来设定Shape3D在Virtual Universe中的位置。

∙Spape3D Node是三维图形节点,这个节点的实体放映在最后的显示画面中,就是三维世界中的每个形体。

包括正方体、球体以及任何形状和外观的三维形体。

∙位于场景图最下层的是两个叶子节点:三维体的外观(Appearance)和几何信息(Geometry),这两个节点定义了一个三维体的显示效果。

∙View Platform位于图1的另一个分枝上,与前面所有描述三维体的性质的概念不同,View Platform和View都是用来定义观察者的信息。

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

2.1 虚拟宇宙(Virtual Universe)在Java3D中,虚拟宇宙被定义为结合一系列对象的三维空间。

虚拟宇宙被用作最大的聚集体表现单位,同时也可被看作一个数据库。

不管是在物理空间还是逻辑内容,虚拟宇宙都可以很大。

实际上在大多数情况下,一个虚拟宇宙就可以满足一个应用程序所有的需求。

虚拟宇宙是各自独立的个体,原因是在任何时候一个结点对象都不能在超过一个的虚拟宇宙中存在。

同样的,在一个虚拟宇宙中的结点对象也不能在其他的虚拟宇宙中可见或者与其他的对象结合。

对于一个Java3D应用程序,必须定义一个虚拟宇宙才可以在这个"宇宙"中显示三维图像。

2.2 Java3D的坐标系统默认情况下,Java3D的坐标系统是右旋的,用方位语义学来解释就是:正y方向是本地重力的上,正x方向是水平的右,正z是这对着观察者的方向。

默认的单位是米。

双精度浮点、单精度浮点甚至是定点来表示的三维坐标都足够来表示和显示丰富的3D场景。

不幸的是,场景不是真实世界,更不必说整个宇宙了。

如果使用单精度坐标,有可能出现下列情景:1. 离原点仅有一百公里的距离,被描绘得相当量子化,所能达到的最好效果就是三分之一英寸,在实际应用中这样的精度比要求的粗糙的多。

2. 如果要缩小到一个很小的尺寸(例如表现集成电路的大小),甚至在离原点很近的地方就会出现同坐标问题。

为了支持一个大型的邻接虚拟宇宙,Java3D选择了有256位的高分辨率坐标:Java3D高分辨率坐标由三个256位的定点数组成,分别表示x、y、z。

定点被固定在第128位,并且值1.0被定义为真实的1米。

这个坐标系统足够用来描述一个超过几百万光年距离的宇宙,也可以定义小于一质子大小(小于一普朗克长度)的对象。

在Java3D中,高分辨率坐标仅仅用于将更加传统的浮点坐标系统嵌入更高分辨率的底层系统。

用这种方法,可以创造出一个具有任意大小和规模的在视觉上无缝的虚拟宇宙,而且可以不必担心数字上的精度。

相关文档
最新文档