java3d官方教程

合集下载

java3d课程设计

java3d课程设计

java3d课程设计一、课程目标知识目标:1. 理解Java 3D图形渲染的原理,掌握Java 3D基本概念和术语;2. 学会使用Java 3D API创建基本的3D几何体,并能对其进行变换和组合;3. 掌握Java 3D中的光照、纹理映射和材质等视觉效果的实现方法;4. 了解Java 3D的动画和交互功能,能够实现简单的动画和交互效果。

技能目标:1. 能够运用Java 3D API设计和开发简单的3D场景和物体;2. 能够独立解决Java 3D编程过程中遇到的问题,具备一定的调试和优化能力;3. 能够运用所学知识进行团队协作,共同完成一个综合性的Java 3D项目。

情感态度价值观目标:1. 培养学生对3D图形编程的兴趣和热情,激发学生的创新意识;2. 培养学生严谨的编程态度和良好的编程习惯,提高学生的自主学习能力;3. 通过团队合作,培养学生的沟通协调能力和团队精神。

课程性质:本课程为选修课程,适用于对3D图形编程感兴趣的初中学生。

学生特点:学生对计算机编程有一定的基础,具备Java编程能力,对3D图形编程有较高的兴趣。

教学要求:教师应注重理论与实践相结合,引导学生通过实践掌握Java 3D编程技能。

在教学过程中,关注学生的个体差异,鼓励学生提问、思考和讨论,提高学生的参与度和积极性。

同时,注重培养学生的团队协作能力和综合素质。

通过本课程的学习,使学生能够独立设计和开发简单的3D应用,为后续学习奠定基础。

二、教学内容1. Java 3D基本概念与术语:讲解场景图、节点、外观、变换等基本概念,使学生理解Java 3D编程的框架和原理。

- 教材章节:第一章 Java 3D简介2. 创建3D几何体:学习使用Java 3D API创建基本几何体,如立方体、球体、圆柱体等,并进行组合和变换。

- 教材章节:第二章 创建3D几何体3. 光照与材质:介绍Java 3D中的光照模型,学习如何为物体添加光源、材质和纹理映射,实现真实感渲染。

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。

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

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

2024版年度Java程序设计全套课件完整版

2024版年度Java程序设计全套课件完整版

•课程介绍与预备知识•基础语法与程序结构•面向对象编程基础目•常用类库与工具使用•图形用户界面开发录•网络编程与数据库连接•多线程编程技术•设计模式与架构思想目•课程总结与展望录Java语言概述及发展历程Java语言的起源与特点01Java的发展历程02Java的应用领域03编程环境搭建与工具选择JDK的安装与配置开发工具的选择Maven的使用编写HelloWorld 程序带领学员编写并运行第一个Java 程序,了解Java 程序的基本结构。

程序解析详细讲解HelloWorld 程序的每一行代码,让学员了解Java 程序的执行流程。

常见问题与解决方法针对初学者在编写和运行Java 程序时可能遇到的问题,提供解决方案。

第一个Java 程序示例030201介绍Java 中的基本数据类型(如int 、float 、char 等)和引用数据类型(如类、接口等)。

Java 中的数据类型变量的声明与赋值运算符的使用类型转换讲解如何在Java 中声明变量、为变量赋值以及变量的作用域。

介绍Java 中的算术运算符、关系运算符、逻辑运算符等,以及运算符的优先级和结合性。

详细讲解Java 中的自动类型转换和强制类型转换,以及转换过程中可能遇到的问题。

数据类型、变量和运算符根据特定条件执行不同代码块。

if 条件语句根据表达式的值选择执行多个代码块中的一个。

switch 语句简洁的if-else 结构,用于条件判断并返回结果。

三目运算符分支结构循环结构for循环while循环do-while循环一维数组存储表格形式数据,可通过多个下标访问元素。

多维数组数组排序数组查找01020403在数组中查找指定元素,并返回其下标或位置信息。

存储相同类型数据的线性结构,可通过下标访问元素。

使用排序算法对数组元素进行排序,如冒泡排序、选择排序等。

数组及其应用方法定义指定方法名、参数列表和返回类型,编写方法体实现特定功能。

方法调用通过方法名和参数列表调用已定义的方法,执行其功能并获取返回值。

JAVA3D安装小结(转)

JAVA3D安装小结(转)

JAVA3D安装⼩结(转)课题需要根据实验数据画出3d曲⾯图,来展⽰⼆维数据,所以使⽤java3d来实现。

这⾥是java3d的学习记录。

1.Java 3D简介Java 3D是Java语⾔在三维图形领域的扩展,是⼀组应⽤编程接⼝(API)。

利⽤Java 3D提供的API,可以编写出基于⽹页的三维动画、各种计算机辅助教学软件和三维游戏等等。

利⽤Java 3D编写的程序,只需要编程⼈员调⽤这些API进⾏编程,⽽客户端只需要使⽤标准的Java虚拟机就可以浏览,因此具有不需要安装插件的优点。

2.java3d的安装⽅法java3d-1_4_0_01-windows-i586.exe安装完后,打开C:\Program Files\Java\Java3D\1.4.0_01⽂件夹,拷贝bin和lib⽂件夹⾄D:\j2sdk14\jre。

3. ⼀个例⼦下⾯代码拷贝到记事本,存为Hello.java。

然后⽤javac Hello.java编译,java Hello.class运⾏。

import com.sun.j3d.utils.geometry.*;import com.sun.j3d.utils.universe.*;import javax.media.j3d.*;import javax.vecmath.*;public class Hello {public Hello(){// 创建⼀个虚拟空间SimpleUniverse universe = new SimpleUniverse();// 创建⼀个⽤来包含对象的数据结构BranchGroup group = new BranchGroup();// 创建⼀个球并把它加⼊到group中Sphere sphere = new Sphere(0.5f); // ⼩球的半径为0.5⽶group.addChild(sphere);Color3f light1Color = new Color3f(1.8f, 0.1f, 0.1f);// 设置光线的颜⾊BoundingSphere bounds = new BoundingSphere(new Point3d(0.0,0.0,0.0), 100.0);// 设置光线的作⽤范围Vector3f light1Direction = new Vector3f(4.0f, -7.0f, -12.0f);// 设置光线的⽅向DirectionalLight light1= new DirectionalLight(light1Color, light1Direction);// 指定颜⾊和⽅向,产⽣单向光源light1.setInfluencingBounds(bounds);// 把光线的作⽤范围加⼊光源中group.addChild(light1);// 将光源加⼊group组,安放观察点universe.getViewingPlatform().setNominalViewingTransform();// 把group加⼊到虚拟空间中universe.addBranchGraph(group);}public static void main(String[] args){new Hello();}}若出现以下错误,则必须更新电脑的显⽰驱动,使之⽀持OpenGl1.2朝上版本。

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学习系列——面的生成(上)

JAVA3D学习系列——面的生成(上)

JA V A3D学习系列(9)----- 面的生成(上)汕头大学机电系张杰(jzhang@)一. 生成平面的对象及其定义JA V A3D可通过编程显示出面来,面有两种:三角形和四边形,相应的对象为Triangle和Quad。

JA V A3D用于生成平面的对象有:1. TriangleArrayTriangleArray (int vertexCount, int vertexFormat )2. QuadArrayQuadArray (int vertexCount, int vertexFormat )3. TriangleStripArrayTriangleStripArray ( int vertexCount , int vertexFormat,int[] stripV ertexCounts )4. TriangleFanArrayTriangleFanArray ( int vertexCount ,int vetexFormat,int[] stripV ertexCounts )5. IndexedTriangleArrayIndexedTriangleArray (int vertexCount , int vertexFormat,int indexCount)6. IndexedQuadArrayIndexedQuadArray (int vertexCount , int vertexFormat,int indexCount )7. IndexedTriangleStripArrayIndexedTriangleStripArray( int vertexCount, int vertexFormat,int indexCount, int stripIndexCounts[])8. IndexedTriangleFanArrayIndexedTriangleFanArray ( int vertexCount, int vertexFormat,int indexCount, int stripIndexCounts[])二. TriangleArray生成的面TriangleArray来生成,利用它可以生成三角片面我们先看一下TriangleArray的定义:TriangleArray (int vertexCount, int vertexFormat )这里:vertexCount表示顶点的个数(必须为三的倍数)vertexFormat表示顶点的格式(第七讲有介绍)下面我们看一个利用TriangleArray的例子,例子里有九个点。

JAVA自学教程(完整版)PPT课件(2024)


二分查找
针对有序数组,每次取中间元 素与目标元素比较,缩小查找 范围
12
03 面向对象编程基础
2024/1/27
13
类与对象的概念
类的定义
类是对象的模板,它定 义了对象的属性和方法 。
2024/1/27
对象的概念
对象是类的实例,具有 类定义的属性和行为。
类与对象的关系
类是对象的抽象描述, 而对象是类的具体实现 。
2024/1/27
32
Socket通信原理及示例
Socket通信原理
理解Socket通信的基本原理,掌握Socket 类和ServerSocket类的使用。
TCP编程
学习基于TCP协议的Socket通信,实现客户 端与服务器之间的数据传输。
多线程处理
掌握多线程在Socket通信中的应用,提高服 务器的并发处理能力。
TreeSet类的特点和使用
TreeSet是Set接口的另一个常用实现类,它基于红黑树实 现。TreeSet会对元素进行排序,因此它适用于需要排序的 场景。
26
Map接口及其实现类
01
Map接口的定义和特 点
Map接口表示一种键值对的映射关系 。Map中的每个元素都包含一个键和 一个值,键在Map中是唯一的。
学习ReentrantLock锁的使用,了解 公平锁与非公平锁的区别。
2024/1/27
等待/通知机制
掌握Object类的wait()、notify()和 notifyAll()方法的使用,实现线程间 的通信。
死锁与避免
了解死锁的概念及产生条件,学习如 何避免死锁的发生。
31
网络编程基础
网络编程概述
ArrayList类的特点和使用

Java3D实现三维显示研究

Java3D实现三维显示研究
曲毅民
【期刊名称】《信息技术》
【年(卷),期】2005(29)4
【摘要】Java3D用其自己定义的场景图和观察模式等技术构造了3D的上层结构,实现了在Java平台使用三维技术.文中在原理上着重介绍Java3D特有的两个重要概念:场景图(Scene Graph)、观察模式(View Model).在接口使用上的介绍分为两部分:实例说明如何使用Java3D接口;说明如何将Java3D技术与Java原有的Web技术(JSP,Serverlet)相结合,在网页上实现三维显示.
【总页数】3页(P83-85)
【作者】曲毅民
【作者单位】哈尔滨理工大学,哈尔滨,150080
【正文语种】中文
【中图分类】TP317.4
【相关文献】
1.用Java3D实现Web虚拟现实的研究与实践 [J], 丁国栋;杨雪
2.基于Java3D的三维场景生成工具的研究与实现 [J], 武一南;黄有群
3.基于Java3D的建模与模型分解的研究与实现 [J], 高金生
4.Java3D扩展鼠标交互功能的研究与实现 [J], 邓文生;马王俊美
5.基于Java3D实现井眼轨迹三维仿真研究 [J], 钟原
因版权原因,仅展示原文概要,查看原文内容请购买。

JAVA教程全集-电子版

第一章J ava概览Java是一种理想的面向对象的网络编程语言。

它的诞生为IT 产业带来了一次变革,也是软件的一次革命。

Java程序设计是一个巨大而迅速发展的领域,有人把Java称作是网络上的“世界语”。

本章将简要介绍Java语言的发展历史、特点、Java程序的基本结构以及开发Java程序的环境和基本方法。

1.1 Java语言发展历史1.1.1 Java 语言产生的背景1991年,SUN MicroSystem公司的Jame Gosling、Bill Joe等人的研究小组针对消费电子产品开发应用程序,由于消费电子产品种类繁多,各类产品乃至同一类产品所采用的处理芯片和操作系统也不相同,就出现了编程语言的选择和跨平台的问题。

当时最流行的编程语言是C和C++语言,但对于消费电子产品而言并不适用,安全性也存在问题。

于是该研究小组就着手设计和开发出一种称之为Oak(即一种橡树的名字)语言。

由于Oak在商业上并未获得成功,当时也就没有引起人们的注意。

直到1994年下半年,随着Internet的迅猛发展,环球信息网WWW的快速增长,Sun Microsystems公司发现Oak语言所具有的跨平台、面向对象、高安全性等特点非常适合于互联网的需要,于是就改进了该语言的设计且命名为“Java”,并于1995年正式向IT业界推出。

Java一出现,立即引起人们的关注,使得它逐渐成为Internet上受欢迎的开发与编程语言。

当年就被美国的著名杂志PC Magazine评为年度十大优秀科技产品之一(计算机类就此一项入选)。

1.1.2 互联网成就了Java互联网的出现使得计算模式由单机时代进入了网络时代,网络计算模式的一个特点是计算机系统的异构性,即在互联网中连接的计算机硬件体系结构和各计算机所使用的操作系统不全是一样的,例如硬件可能是SPARC、INTEL或其他体系的,操作系统可能是UNIX、Linux、windows或其他的操作系统。

java3D安装教程

在Eclipse中运行Java3D的程序此页解释了如何在Eclipse中使用Java3D的库运行程序。

1.下载Java3D的。

访问此网页下载为您的系统Java3D的库。

2.下载用于Windows包含一个安装程序。

我发现最简单的安装在我的Java文件夹,包含在我的情况同一个标准的Java,jdk1.6.0_18下载Java3D的文件和目录。

在运行安装程序:3.启动Eclipse。

你可以创建一个Java3D的代码为您的新项目,或使用一个已经存在的项目。

我将创建一个新的名为3DExamples 项目4.下载HelloUniverse.java和添加项目,从第3步。

HelloUniverse.java有很多语法错误,因为它是指一些Java3D的非标准类。

我们需要告诉到哪里寻找这些类的项目。

5.在Eclipse菜单,选择“项目” - >“属性”6.在弹出窗口中选择 Java Build Path,然后单击 Add Library ...“按钮。

7.在下一个窗口中,选择用户库,点击“下一步”按钮。

8.在下一个窗口中单击“用户库”...“按钮9.在未来的点击新建...“按钮。

10.在窗口,弹出新的库名称。

使用名称Java3DLib。

然后单击“确定”按钮。

11.选择您刚才创建的库,然后单击“添加JAR文件...”按钮。

12.在弹出浏览文件夹,你在第2步安装Java3D的文件选择。

(Java3D的jar文件的路径在我的机器是用Java3D - > 1.5.2 - >库- >分机- >)选择所有三个jar文件(j3dcore.jar,j3dutils.jar,和vecmath.jar的)。

所有三个jar文件,选择后单击“打开”按钮13.后加入的罐子在首选项窗口点击的好吧按钮。

14.在弹出的窗口中单击 Finish按钮。

15.在构建路径“窗口中选择回到您刚才添加的Java3DLib,展开它,并选择本机库的位置属性。

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

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 核心类。

在Java3D API中有数以百计的属性和方法。

尽管如此,一个包含动画功能的简单的虚拟世界的构建仅仅需要几个类就行。

本章讨论了用尽少的对象集合和交互来渲染一个简单虚拟世界。

本章包含了一个简单但是完全的叫HelloJava3D的程序的开发过程,这个程序显示了一个能旋转的立方体,这个示例程序是逐步开发完成的,因此这个程序用了很多版本来展示Java 3D编程过程中的每一部分。

本教程中的所有程序都可以获得电子的版本。

更多的信息请见前言中的"获得本教程"[译者注:/products/java-media/3D/collateral/]。

除了Java3D核心包之外,Java3D程序设计也会用到其它的包,比如com.sun.j3d.utils,这个包通常称做Java3D工具类,核心类中仅仅包含了在Java3D编程中必段的最底层的类,而工具类是对核心类方便而强大的补充。

工具类主要分为四类:内容加载器、场景图构建辅助类、图形类和方便的一些工具类。

将来还有一些功能,比如nurbs[non-uniform rational B-spline,非均匀有理B样条],也会加到工具类,而不是Java3D核心包中。

而一些工具类在Java 3D API 将来的版本中也可能会移到核心包中去。

利用工具类大大地减少了Java3D程序中的代码行数。

除Java3D核心类和工具类包之外,每一个Java3D程序还引用了java.awt包和 javax.vecmath包中的类. java.awt包就是Abstract WindowingToolkit (AWT). AWT类用于创建显示和渲染场景和窗口。

而javax.vecmath包则定义了对点、矢量、矩阵以及其他数学对象进行数学运算的类。

在余下的教程中,词汇可视对象(visual object)就是场景图中的对象比如一个立方体或者球体。

对象(object)则是指一个类的实例。

而内容(content)指的是一个场景图中全部的可视对象。

1.3构建场景图一个Java3D的虚拟世界创建自一个场景图,而场景图就是由Java3D类的实例构建而成.场景图集成了定义图形、声音、光线、位置、方向以及可视物体和声音对象的表面属性等对象。

一个通常的图形定义是一个由结点和弧边组成的数据结构。

一个结点是一个数据元素,而边则是数据元素之间的关系。

场景图中的结点就是Java3D类的实例,而边展示了这些Java 3D实例之间的两种关系。

最为通用的关系是就是父子关系(parent-child relationship),一组结点可以有任意数目的孩子却只能有一个双亲。

一个叶子结果可以有一个双亲但是没有孩子。

另一个关系是引用(reference)。

一个引用与场景图结点中的结点组件(NodeComponent)对象相关联。

结点组件定义了用于渲染可视对象的图形和表面属性。

Java 3D场景图就是由一堆具有父子关系的结点构建成的树形结构。

在树形结构里,其中有且仅有一个结点是根结点,共他结点都可以顺着从根开始的弧边可以访问到,树形结构中的结点是没有回路的。

一个场景图就是由植根于本地(Locale)对象的树而形成的。

结点组件和引用弧边都不是场景图树的组成部分。

在树形结构中,从根结点到叶子结点有且仅有一条路径,因此,从场景图的根到其每个叶子结点也仅有一条路径。

从场景图根结点到到特点叶子结果的路径我们称之为该叶子结点的场景图路径(scene graph path)。

因此,一条场景图路径恰恰只通向了一个叶子结点。

而在场景图中从根到每个叶子结点都有一条这样的路径。

在Java3D场景图中的每一条场景图路径也完全地定义了路径的叶子的状态信息。

状态信息包括位置、方向、可视对象的大小。

由此可见,每一个可视对象的可视属性仅仅由其场景图路私决定。

Java3D渲染利用这点,以仅可能有效地按它所定义的顺序来渲染叶子对象。

Java 3D程序员一般情况下不用控制渲染对象的顺序。

[原注:Java3D 程序员仅仅可以用来控制渲染对象顺序的是OrderedGroup类结点,在本教程中对此部分未加论述,请参见Java3D API规范文档]在树形结构中,从根结点到叶子结点有且仅有一条路径,因此,从场景图的根到其每个叶子结点也仅有一条路径。

从场景图根结点到到特点叶子结果的路径我们称之为该叶子结点的场景图路径(scene graph path)。

因此,一条场景图路径恰恰只通向了一个叶子结点。

而在场景图中从根到每个叶子结点都有一条这样的路径。

在Java3D场景图中的每一条场景图路径也完全地定义了路径的叶子的状态信息。

状态信息包括位置、方向、可视对象的大小。

由此可见,每一个可视对象的可视属性仅仅由其场景图路私决定。

Java3D渲染利用这点,以仅可能有效地按它所定义的顺序来渲染叶子对象。

Java 3D程序员一般情况下不用控制渲染对象的顺序。

[原注:Java3D 程序员仅仅可以用来控制渲染对象顺序的是OrderedGroup类结点,在本教程中对此部分未加论述,请参见Java3D API规范文档]场景图的图形表示可以当作设计工具或者Java3D程序的文档。

场景图一般用一些标准的图形标记来绘制,如图1-1所示。

Java 3D程序可能不止有包含场景图中的这些对象。

可以用以上标志集合来设计一个Java3D虚拟世界场景图。

等设计上的事情完成后,场景图的设计就是程序设计的规范。

等到程序也设计完成,同一个场景图就是程序的精解表现(假设程序是依照设计的图来进行的话)。

一个从已有程序绘制成的场景图可以做创建程序场景图的文档。

可以用以上标志集合来设计一个Java3D虚拟世界场景图。

等设计上的事情完成后,场景图的设计就是程序设计的规范。

等到程序也设计完成,同一个场景图就是程序的精解表现(假设程序是依照设计的图来进行的话)。

一个从已有程序绘制成的场景图可以做创建程序场景图的文档。

图1-1左边所示的每一个标记代表了场景图中的每一个对象,前两个标记代表特定的类的对象,即VirtualUniversee和Locale类的对象,下面的三个则常常用于标注特定对象[译者注:Group子类的对象等]的子类,最后一个标记用于表示其它类的对象。

实线箭头表示两个所连接的对象之间存在父子关系。

而虚线箭头则表求一个对象是另一个对象的引用。

引用的对象可以供一个场景图中的不同的分支所共享。

一个简单的场景图的例子如图1-2所示。

在平时,创建一个错误的场景图也是可能的,一个不合理的场景图的例子如图1-3所示.图1-3所描绘的场景图之所以不合理是因为它与有向无环图(Directed Acyclic Graph Or DAG)的规则相冲突.问题存在于两个TransformGroup对象都以同样的Shap E3D 叶子对象作为其孩子。

请记住,一个叶子结点只能一个双亲,也就是,从Locale对象到叶子结点只能有一条路径(或者从叶子结点到Locale 对象只能有一条路径)。

你也许会认为,图1-3图所示的场景在虚拟世界中定义了三个可视对象。

它看起来好像是这个场景图通过重用图形右边的可视对象(Shape3D)而定义了两个对象。

从概念上讲,每一个TransformGroup 对象都作为共享的那个Shape3D的双亲,这个Shape3D的可视化对象可以允许在不同地方放置一张图片。

尽管如此,由于父子边之间的关系构不成树形结构,所以这个场景图是不合法的。

在这个例子中,表现为Shape3D对象有多于一个以上的双亲。

对树形结构和有向无环图的讨论是正确的,然而,Java 3D运行时系统会报告这类父子关系之间的错误。

树形结构存在的限制是每一个Shape3D 对象只能有一个双亲。

从图1-3所示的例子看来,‘多亲'异常会在运行时报告出来。

图1-4中,展示了这种不合法场景图的解决办法,每一个Shape3D只有一个双亲。

一个定义了不合理(法)场景图的Java3D程序可能通过编译,但是不会在运行时渲染。

当一个定义了不合法场景图的Java3D程序运行时,Java3D 系统会检测到这个问题,从而会报告一个异常。

程序还会继续运行,但是结果是,应该被关闭,没有任何渲染好的图象生成。

每一个场景图有一个唯一的VirtualUniverse,这个VirtualUniverse有一系列 Locale 对象。

一个Locale对象,提供了虚拟世界中的一个参考点。

可以把Locale对象看作是在虚拟世界中定义可视对象位置的标志。

一个Java3D程序有多于一个的VirtualUniverse对象,技术上是可行的,因此,可以在虚拟世界中定义多个Locale对象,然而,在多个虚拟世界之间没有内在的沟通方式,更进一步讲,一个场景图不能存于多个虚拟世界中。

相关文档
最新文档