文档库 最新最全的文档下载
当前位置:文档库 › Java3D

Java3D

Java3D
Java3D

第一个Java3D小程序SimpleCone

package package6_8;

import java.applet.Applet; //表示程序是Applet程序

import java.awt.BorderLayout;//窗口环境采用BorderLayout方式进行布局

import com.sun.j3d.utils.geometry.Cone; //调用生成Cone的一个Utility,该包提供基本形体

import com.sun.j3d.utils.universe.*; //调用一些设置基本的观测位置所用的类

import javax.media.j3d.*; //表示调用程序所需的Java3d核心类,所有的Java3d程序必须带有这一条import javax.vecmath.*; //表示调用程序所需的定义矢量计算所用的数学类

//import com.sun.j3d.utils.applet.MainFrame;//可以使程序既为application也为applet

import java.awt.GraphicsConfiguration; //

public class SimpleCone extends Applet{

public BranchGroup createSceneGraph(){

BranchGroup objRoot =new BranchGroup();//objRoot对象用于向程序的构造方法提供整个createSceneGraph方法里的内容

TransformGroup objTrans=new TransformGroup();//新建objTrans对象用于存放坐标系

objRoot.addChild(objTrans); //缺省状况下Java3d的观察点位于(0,0,2.41),所以这里objTrans两句不要也可运行成功

BoundingSphere bounds=new BoundingSphere(new Point3d(0.0,0.0,0.0),100.0); //新建球形限制框,以坐标原点为中心,半径100

Color3f bgColor=new Color3f(1.0f,1.0f,1.0f); //设置背景色为白色

Background bg=new Background(bgColor); //设置背景对象bg的颜色为bgColor

bg.setApplicationBounds(bounds); //设置背景应用范围为bounds

objRoot.addChild(bg); //将背景对象bg添加到objRoot对象中

Color3f directionalColor=new Color3f(1.f,0.f,0.f);//设置光源为绿色

Vector3f vec=new Vector3f(-1.f,0.f,-1.f); //设置光源为-Z方向

DirectionalLight directionalLight=new DirectionalLight(directionalColor,vec);//使用直接光照

directionalLight.setInfluencingBounds(bounds); //设置光照影响范围为bounds

objRoot.addChild(directionalLight); //将光照对象添加到objRoot中

Appearance app=new Appearance();//设置外观

Material material=new Material();

//material.setEmissiveColor(new Color3f(1.0f,0.0f,0.0f));//外观无光照条件下材质为辐射颜色,设置为红色

material.setDiffuseColor(new Color3f(1.0f,1.0f,0.0f)); //有光照条件下,材质为漫反射颜色,设置为黄色

app.setMaterial(material); //设置材质material到对象app,material为空会使光照失效

Cone cone=new Cone(.5f,1.0f,1,app);//绘制半径为0.5,高为1.0的圆锥,片元标记为1,外观为app (其中已为圆锥体设置了材质属性)

objTrans.addChild(cone);

https://www.wendangku.net/doc/d79544308.html,pile();

return objRoot;

}

public SimpleCone(){

setLayout(new BorderLayout());

//Canvas3D c=new Canvas3D(null);

GraphicsConfiguration config=SimpleUniverse.getPreferredConfiguration();

Canvas3D c=new Canvas3D(config);

//将上一句换成以上两句;记得导入import java.awt.GraphicsConfiguration;

add("Center",c);//applet的方法,用于将指定组件(画布c)添加到该容器(applet)中

BranchGroup scene=createSceneGraph();

SimpleUniverse u=new SimpleUniverse(c); //以3d画布实例c创建一个局部单一的查看平台和一个观察者对象

u.getViewingPlatform().setNominalViewingTransform();

u.addBranchGraph(scene);

}

Appearance 隶属于NodeComponent,其对象定义了所有的渲染状态,这些状态能被设置成为3d图形结点的组成对象;这些渲染状态包括:

颜色属性,线属性,点属性,多边形属性,渲染属性,透明度属性,材质,纹理,纹理属性,纹理坐标生成,以及纹理单元状态。

GraphicsConfiguration 类描述了图形目标(如打印机或监视器)的特征。有许多与单一图形设备相关的 GraphicsConfiguration 对象,它们表示了不同的绘图模式或功能。相应的本机结构也将会因平台而异。在 Microsoft Windows 系统上,GraphicsConfiguration 表示当前分辨率和颜色深度下可用的 PixelFormat。

getPreferredConfiguration()为系统找到首选的图形布局对象,该对象可被用来为对象创建Canvas3D对象。返回值为系统最佳的图形布局对象。

public class SimpleUniverse extends VirtualUniverse 该类设立一个最小用户环境来快速简单地组建Java3d程序并运行。这个多用途的类在场景表

的视图中创建所有的必需对象。值得注意的是,这个类创建了一个局部的单一的查看平台,和一个观察者对象(都带有缺省值)。一些基于Java3d的应用

程序将发现SimpleUniverse能为这些应用程序提供所有必需的功能性需求。更多尖端的应用会发现它们需要更多控制以获取额外的功能性而不能靠使用该类获得。SimpleUniverse.getViewingPlatform()用于获取与该场景表相关联的查看平台对象;返回值为ViewingPlatform 类型。

ViewingPlatform类用于设立Java3d场景表中的视图部分,ViewingPlatform对象包含一个MultiTransformGroup结点,允许联合一系列的转换。

对于这一结构与任何与此ViewingPlatform有关的几何体,都使得视图平台被添加(真恶心的翻译)

ViewingPlatform.setNominalViewingTransform()在基于当前视野的视图平台转换上设置

已设定的视野距离。

void addBranchGraph(BranchGroup bg)用于为场景表中的几何体部分添加结点。

public class Canvas3Dextends java.awt.Canvas 这个Canvas3D类为3D渲染提供了一个画布。它同时用于屏幕渲染与屏外渲染。

Canvas3D是AWT Canvas 类的扩展,用户可以使用该子类实现更多的功能性。

Canvas3D对象继承自Canvas对象,包含的3D关联信息有:画布像素尺寸,3D画布的位置,两者都包含在一个Screen3D对象里,而不管画布是否是立体感觉的。

由于所有的Canvas3D对象都包含一个到Screen3D对象的参考,又由于Screen3D对象定义了物理单元的像素尺寸,Java3d能够将一个以像素为单位的Canvas3D

尺寸转化为以米为单位的物理世界尺寸。

Canvas 组件表示屏幕上一个空白矩形区域,应用程序可以在该区域内绘图,或者可以从该区域捕获用户的输入事件。

应用程序必须为 Canvas 类创建子类,以获得有用的功能(如创建自定义组件)。必须重写paint 方法,以便在 canvas 上执行自定义图形。

TransformGroup与Transform3D

TransformGroup——>javax.media.j3d.Group——>javax.media.j3d.Node——>javax.med ia.j3d.SceneGraphObject——>https://www.wendangku.net/doc/d79544308.html,ng.Object

组结点包含一个转换,TransformGroup结点指定一个单独的空间转换,通过一个Transform3D对象,能够决定位置,确定方向,衡量所有的子对象。

被指定的转换必须是仿射的(就是平移旋转缩放的综合转置),而且,如果在场景图中TransformGroup结点被用作ViewPlatform结点的祖先,那么转换能且只能允许旋转、

平移、标定尺寸……

Transform3D——>https://www.wendangku.net/doc/d79544308.html,ng.Object

TransformGroup特点:

1.在三维空间中放置任何形体,灯光,声音都要要到该对象。

2.该对象用来定义一个通过设置,可以移动、旋转和放大缩小的局部坐标系。

3.该对象有两个flags,其中ALLOW_TRANSFORM_WRITE用来将最新的数据(即坐标变化后的数据写入到数据结构中),允许程序在运行的时候修改该节点上的场景。

ALLOW_TRANSFORM_READ用来读取位置变化前的数据,从而进行判断和处理。允许程序在运行的时候读取该节点上的场景。

4.通过设置ALLOW_TRANSFORM_WRITE来使坐标系运动(此时在不要读取值时使用,如读取移动的距离,选旋转的角度,缩放的比例等值。若要读取这些值,

则要再使用ALLOW_TRANSFORM_READ)

5.要在程序中通过鼠标,移动、旋转、比例放大所指定的局部坐标系,则需要同时设置ALLOW_TRANSFORM_WRITE和ALLOW_TRANSFORM_READ。

6.Java虚拟机会为这两个flags创建单独的线程(或者进程)来负责接收场景的反馈,在控制场景,避免了用户不必要的开销。

Transform3D的特点

1.表示所指定的坐标的坐标变换,如旋转、放大缩小、平移等

2.Quat4f(x,y,z,w)的参数介绍

x:x坐标 y:y坐标 z:z坐标 w:物体旋转的角度如:

Quat4f(0.0f,1.0f,0.0f,1.57f) 表示物体绕Y轴旋转90度,当Y轴的只越大则旋转的幅度

越大。

当x,y,z的值不为0时,其值的大小即表示转动幅度的大小,值越大,表示向该方向转动的幅度也越大。

3.Transform3D有四个方法rotx(),roty(), rotz(),setTranslation().当这四个方法一起使用的时候,只有最后一个有作用。为了能够让rotx,roty, rotz

都显示出来,则可以使用setRotation(new Quat4())来代替,此时不论setTranslation()在setRotation(new Quat4())前还是后,都可以显示出效果。

光照和材质特性(无实质性说明)

Light 类

光用于照亮场景中的几何对象。有几种不同的光类型,它们都是抽象 Light 类的子类。所有光都有一个颜色值,即开/关位,以及一个描述它照亮的场景区域的绑定对象。

在现实世界里,周围的对象被几个不同的光源照亮。从窗户射进的阳光和屋顶的灯光一起照亮了屋内的一切。两种光都会影响屋内对象的颜色和外观。在 Java 3D 中,可以通过使用多个光源来模拟实际的光照效果。

光类型

在场景中 AmbientLight 无处不在。它不发自某个特定点,也不指向某个特定方向。PointLight 从一个指定位置向各个方向辐射,并随着距离的增加而减弱。点光源的一个例子是没有灯罩的台灯。SpotLight 是一种将光的范围限制在一个圆锥形内的点光源。聚光源的一个例子是手电筒。

DirectionalLight 的光线射向某一个特定方向,却不发自任何特定的位置。这种定向光的所有光线都平行发射。虽然从技术上说,太阳是一个点光源,但使用 DirectionalLight 可以更准确地模拟太阳光。

图中的茶壶有了环境光(您可以发现茶壶的背面也被略微照亮),和来自前面的定向光的照射。这两种光共同影响了茶壶表面的每个三角形的最终颜色。

场景图中的光

所有的 Light 节点都是场景图中的叶节点。当您创建它们时,需要指定 Bounds 对象;我们将使用 BoundingSphere。光将仅仅影响那些位于光的 BoundingSphere 所定义的空间内的几何对象,因此我们需要确保 BoundingSphere 足够大。在创建完光之后,我们将其附加到场景图的顶部 BranchGroup。光、行为和材质都在场景图的上面添加。

材质特性

材质特性描述对象如何反射光线。如果您的对象(Primitive 或 Shape3D)在其 Appearance 对象中没有 Material 对象,则即使您指定了一个光源,它也不会被照亮。您必须创建一个Material 对象,启用 Material 对象中的光照,然后将其添加到 Appearance 对象中。Material 对象是在 Appearance 对象中保存的几个不同的属性集之一。

为了更好的理解材质特性如何影响对象的外观,请想象一颗闪闪发光的红宝石这个对象和一条红地毯。虽然它们都是红色的,但它们对光的反射却不同― 红宝石反射灯光的地方将发出耀眼的光芒,而地毯则会将光线散射出去。要为 Java 3D 指定这一外观差异,您最好在Material 对象中为红宝石指定一个高 shininess 值而给地毯一个很低的 shininess 值。下图显示了一些具有不同材质特性的球。

表面法线

表面法线是一个与该点所在表面垂直的矢量,它表示顶点所在表面的走向。在计算光照效果时,表面法线影响表面反射光的方式。表面法线和观察者的位置决定球面上的哪些地方闪亮发光或是镜面反射。

幸运的是,Primitive 类将会为您生成表面法线,因此本教程将不进一步讨论法线。

计算光照效果

Java 3D 使用表面法线来计算光照效果。因为每一顶点都要计算光照效果,因此具有许多顶点的对象看起来将更逼真。

上图中的 Sphere 对象的顶点数目由 Sphere 对象中的 divisions 参数控制。对粗糙的球体,使用的值为 9。对平滑的球,使用的值为 30,因此看起来更平滑一些。

光照和材质要点

·光位置和颜色、材质特性以及表面法线都会影响所照亮的对象的最终颜色。·Appearance 类包含一个 Material 对象,该对象保持您的几何对象的光照状态。记住要启用 Material 对象中的光照。

·Material 类定义了您的几何对象反射光的方式。它包括环境光、散射光、反射的颜色和亮度。

·环境光源、点光源和方向光源产生不同的光照效果。请始终外加一个环境光源以确保场景中有些光。

·法线值确定表面的平面走向,使用 Primitive 类时会自动生成该值。

mongoDb使用教程

MongoDB Java API 该文档是翻译自文档[mongodb-docs-2010-10-24.pdf]的[Java Language Center]章节,根据自己的理解整理而成。 希望能给像我这样开始接触的朋友一点帮助,同时也做个备忘,因为是刚刚学习,其中的很多功能目前都用不上,以后万一有什么功能不太清楚,也可以直接查阅该文档了。首先安装可视化工具mongoDBvue可去百度搜索 MongoDB Java Driver 简单操作 一、Java驱动一致性 MongoDB的Java驱动是线程安全的,对于一般的应用,只要一个Mongo实例即可,Mongo有个内置的连接池(池大小默认为10个)。 对于有大量写和读的环境中,为了确保在一个Session中使用同一个DB时,我们可以用以下方式保证一致性: DB mdb = mongo.getDB('dbname'); mdb.requestStart(); // // 业务代码 // mdb.requestDone(); DB和DBCollection是绝对线程安全的,它们被缓存起来了,所以在应用中取到的可能是同一个对象。 二、保存/查找对象(DBObject) Java驱动提供了DBObject接口,方便我们保存对象到数据库中。 定义需要保存的对象: public class Tweet implements DBObject { /** ...... */ } 然后我们可以使用该对象: Tweet tweet = new Tweet(); tweet.put("user", userId); tweet.put("message", message); tweet.put("date", new Date()); collection.insert(tweet); 当从数据库中查询时,结果会自动的转换成DBObject对象,我们可以转换成我们自己的类型: collection.setObjectClass(Tweet); Tweet myTweet = (Tweet)collection.findOne(); 三、创建连接 Mongo m = new Mongo(); Mongo m = new Mongo("localhost"); Mongo m = new Mongo("localhost", 27017); DB db = m.getDB("mydb); 注意:事实上,Mongo实例代表了一个数据库连接池,即使在多线程的环境中,一个Mongo实例对我们来说已经足够了。

Java3D实现三维显示

Java3D用其自己定义的场景图和观察模式等技术构造了3D的上层结构,实现了在Java平台使用三维技术。本文在原理上着重介绍Java3D特有的两个重要概念:场景图(Scene Graph)、观察模式(View Model)。在接口使用上的介绍分为两部分:实例说明如何使用Java3D接口;说明如何将Java3D技术与Java原有的Web技术(JSP、Serverlet)相结合,在网页上实现三维显示。 关于Java3D 1.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,可以在https://www.wendangku.net/doc/d79544308.html,/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教程系列五:将Java3D与Java平台技术的

Java3D教程系列五:将Java3D与Java平台技术的Java3D教程系列五:将Java3D与 Java平台技术的 Java3D可以很容易的与Java平台的其他技术相结合,如Applet、JSP、Serverlet、JDBC、EJB等。100%的纯Java实现是Java3D可以与如此多的Java平台技术结合的根本原因: 同是Java平台保证Java3D可以在Applet中实现; Applet使Java3D可以轻易的在网页中显示; JSP、Serverlet技术保证将动态网页技术用于Java3D显示; Serverlet本身就是J2EE平台的核心技术,这使得Java3D可以搭建于J2EE平台。更可以使用所有J2EE的其他技术:JDBC、EJB、JMS… 在网页上显示3D图形 Java3D一个最大的特性是可以使用Applet作为显示容器,例3和例4的代码分别显示了如何在Applet中显示3D图形和在网页文件中(HTML)嵌入该Applet。 Public class HelloUniverse extends Applet { private SimpleUniverse u = null; 例3 Applet实现Java3D ,HTML, public BranchGroup createSceneGraph() { ,HEAD, 例4 在网页嵌入显示3D Applet BranchGroup objRoot = new BranchGroup(); ,TITLE,Hello, Universe!,/TITLE, 动态网页技术与Java3D …. ,/HEAD, 通过Jsp和Serverlet,可以使Java3D在网页中"动"起来。虽然

thinkcms安装使用教程

程序安装环境: - PHP(5.2.x)需要开启mysql(5.0以上), gd, curl, mbstring支持 - _runtime和data目录需要可写权限(777) - 安装有ZendOptimizer 安装初始化账号为: 用户名:admin@https://www.wendangku.net/doc/d79544308.html, 密码:52001314 后台地址:https://www.wendangku.net/doc/d79544308.html,/index.php?app=admin 架构步骤(FTP上传,记得务必要采用二进制上传): 修改采集工具的地址: 1、根目录下pinpick.js 中查找var siteDomain,修改为对应你的域名网址(不要添加http://) 以及修改文件\apps\home\Tpl\default\Caiji\tools.html 查找pinpick.js ,修改前面为你的域名。 2、\apps\weibo\Tpl\default\Pick\index.html 第56行和70行,修改前面为你的域名。 第一种方法:运行/install(安装完毕后,进行第三操作)。表名前缀不要修改。 安装初始化账号为: 用户名:admin@https://www.wendangku.net/doc/d79544308.html, 密码:52001314 安装完后提示管理员账号出错,不用管,用以上默认账号登陆即可。 第二种方法: 首先:用phpmyadmin将install/t_thinksns_com.sql 导入到数据库(utf-8)。 第二:修改文件config.inc.php配置,改为你数据库的相关设置。 第三: 登录后台 1、全局\ 平台配置修改为你的淘宝KEY(12166995)和淘宝密钥(fe0c6fafc476d2fc0555e2f52389f786),(有时出现获取不了宝贝或超时,请更换稳定的淘宝KEY 和淘宝密钥。)

用JAVA3D实现三维实体上数据结果的展示

第24卷第2期宜春学院学报(自然科学)Vol.24,No.119 2002年4月Journal of Yichun Universi ty(natural science)Apr.2002用JAVA3D实现三维实体上数据结果的展示 邓方宝 (宜春学院理学院数学系,江西宜春336000) y [摘要]本文采用JAVA3D语言,对三维空间表面上的数据进行直观地可视化显示.显示的结果 是交互式的,可以改变观测角度及任意缩放.本文通过一个具体模型,说明了该方法的可行性,并 给出了具体实施过程及相应的具体程序. [关键词]JAVA3D;三维模型;数据显示;可视化 [中图分类号]TP3121JA[文献标识码]A[文章编号]1671-380X(2002)02-0045-03 Visualization of Data on3-Dimensional Surface by JAVA3D DENG Fang-bao (The mathematics department o f science institue,Yichun university,Yichun33600,0China) Abstract:In this paper,the visualiztion of the datum on3-Dimensional surface was conducted by JAVA3D language1 The outcome of display is interactive,and it is changeable in angle and size1This paper try to prove that the method is feasible with a material model,and give the process and the progra m of performing1 Key Words:JAVA3D;3D Model;da tum display;visualiztion 1引言 目前,各种研究成果非常多,不少成果表现为数据结果,如何直观形象地把枯燥的数据展现出来就显得非常重要.现在一般是使用OFFICE EXCEL制表软件等把数据制成表格、曲线或曲面.这种方法可移植性差,也缺少交互性,只对于简单数据是可行的,但对于在三维空间的不规则曲面上的数据显示就难于实现.另一方面,随着互联网的发展,许多研究的数据结果需要放到互联网上以实现共享,如果这种结果显示是根植于三维模型且有一定的交互功能,他人就能更好地通过互联网来了解共享这些科技成果. JAVA3D是JAVA的一组API(应用编程接口),是JAVA语言[1]在三维领域的扩展.是一个编写三维应用程序的性能优越的工具.编写JAVA3D程序时,只需找到所需要的对象,了解对象及其特性并将其加以应用,就可快速地编写出复杂的三维应用程序.JAVA3D程序和其它JAVA程序一样,可以在网页上运行,因而利用JAVA3D就能很方便地在互联网上交互式显示三维模型上的数据结果. 2主程序框架的实施 JAVA3D程序是由类组成的,程序中的类Data_ 3D是自定义的公共类,它是用public class Data_3D e xtends Applet{}来声明,使该程序作为Applet程序,可插入到超文本HTML文档中来运行. JAVA3D作为JAVA的一个API,本身包含了几乎所有编写交互式三维应用程序所需要的最基本的类、方法及接口[2].它的核心类及接口存放在javax1media1j3d程序包中,而且JAVA3D还提供了一个重要的有助于快速编程的应用类型的程序包com1sun1j3d1utils.凡是能够利用的外部的类均需用import引入上述包中的类,因而使用JAVA3D能方便快速地编写实现三维实体数据可视化的三维应用程序. 类Data_3D(Data_3DX)是本文的主程序,见附件一源程序Data_3D1java(Data_3DX1java),其内容主要是由以下几个方法组成: 211程序中自定义类Data_3D的构造方法Data_3D () 在构造方法中,首先设置一个边界页面布局(BorderLayout),再调用预设的图形配置值来建造了一个三维图形窗口环境.通过调用createSceneGraph 方法来建立一个拥有三维形体及其它内容的具体场景图分支节点BranchGroup.并设置好灯光效果,最后将该场景图分支节点BranchGroup放入到整个场景图中的合适位置.该方法用来创建一个实际的Data_3D类,生成一个具体的场景图. 212建立场景图内容分支的createSceneGraph()方 # 45 # y收稿日期:2001-09-25 作者简介:邓方宝(1964-),男,江西奉新人,计算机硕士,讲师,从事数学、计算机教学和科研工作.

JAVA3D

JAVA 3d Java 3D是Java语言在三维图形领域的扩展,是一组应用编程接口(API)。利用Java 3D提供的API,可以编写出基于网页的三维动画、各种计 算机辅助教学软件和三维游戏等等。利用Java 3D编写的程序,只需要编程人员调用这些API进行编程,而客户端只需要使用标准的Java虚拟机 就可以浏览,因此具有不需要安装插件的优点。 目录 JAVA 3D从高层次为开发者提供对三维实体的创建、操纵和着色,使开 发工作变得极为简单。同时,JAVA 3D的低级API是依赖于现有的三维图形 系统的,如Direct 3D、OpenGL、QuickDraw 3D和XGL等,它可以帮助我们: A. 生成简单或复杂的形体(也可以直接调用现有的三维形体) B. 使形体具有颜色、透明效果、贴图。 C. 可以在三维环境中生成灯光、移动灯光。 D. 可以具有行为(Behavior)的处理判断能力(键盘、鼠标、定时等). E. 可以生成雾、背景、声音等。 F. 可以使形体变形、移动、生成三维动画。 G. 可以编写非常复杂的应用程序,用于各种领域如VR。 JAVA 3D的这种体系结构既可以使其开发的程序“到处运行”,又使其 能充分利用系统的三维特性。就因为JAVA 3D拥有如此的强大的三维能力, 使得它在网络世界,特别是在游戏中能大展姿彩。 编辑本段 JAVA3D功能应用 JAVA3D可用在三维动画、三维游戏、机械CAD等领域。 可以用来编写三维形体,但和 VRML不同,JAVA3D没有基本形体,不过 我们可以利用JAVA3D所带的UTILITY生成一些基本形体如立方体、球、圆锥等,我们也可以直接调用一些软件如ALIAS、LIGHTWARE、3DS MAX生成的形体,也可以直接调用VRML2.0生成的形体。 可以和VRML一样,使形体带有颜色、贴图。 可以产生形体的运动、变化,动态地改变观测点的位置及视角。 可以具有交互作用,如点击形体时会使程序发出一个信号从而产生一定 的变化。 可以充分利用JAVA语言的强大功能,编写出复杂的三维应用程序。 JAVA3D具有VRML所没有的形体碰撞检查功能。

java3d_API_java3d_programming

Getting Started with the Java 3D? API Chapter 1 前言:如对译文中有不同理解的地方请参考原著,水平有限,请见谅,谢谢 1.3构造一个场景图 一个java 3d虚拟宇宙是由一个由JA V A 3D类的实例构成的场景图构造出来的,场景图由许多对象聚集在一起去定义几何体,声音,光线,位置,方向,虚拟的外观和音频对象 对于图的一般定义可以说是包含结点和弧线的数据结构,一个结点就是一个数据元素,弧线代表的就是数据元素之间的关系。在场景图的一个结点代表JA V A 3D的一个类的实例,弧线代表JA V A 3D实例之间的两种关系。 最普遍的一种关系就是父子关系,一个(group node)组结点可以有很无限多个子类但只能有一个父类,一个(leaf node)叶子结点可以有一个父类但不能有子类,另外一种关系就是引用关系,一个引用关系把一个(NodeComponent)结点组件对象和一个(scene graph Node)场景图结点连系起来,NodeComponent objects定义用来渲染视觉对象的几何体和外观属性 一个 java 3D场景图由父子关系的Node对象构成,最后形成一个树形结构。在一个树结构中,有一个称为根结点的结点,其它结点从根结点一直往下延伸。一个树的弧线不能形成回路,一个场景图起源于(Local objects)的根结点,(NodeComponents)和(reference arcs)不是场景场的部分。 从一个树的根结点到叶子结点只存在一个路径,因而,从场景图的根到每一个子叶结点只有一条路径。从场景图的根到指定的叶子结点称为叶子结点的场景图路径。由于一条场景图路径只通向一个确定的结点,所以在场景图中对于每个结点都只有一条场景图路径。 在一个javad3D场景图中每一个场景图路径都完全载明了它的叶子的状况信息。状况信息包括位置,方向和视觉对像的大小。因此,每一个视觉对象的视觉属性都依附于场景图路径。java3d渲染器充分利用了这个事实而从被认为是最有效的顺序去渲染叶子结点。java3d程序员不必操心去支配对象的渲染顺序。一个场景图的图表的表示可以作为JA V A3D的设计工具和文档说明。我们可以用标准的图形符号来画场景图,如图1.1.java3d程序可以有比这场景图更多的对象。 我们可以用标准的符号来设计一个JA V A3D虚拟宇宙的场景图。在设计完成之后,场景图的制图可以作为这程序的文档说明。在程序完成之后,对应的场景图就是程序的一个简明的表示。

Java3D基本图形功能介绍

1.1Java3D的虚拟场景空间设计 Java3D是一种面向对象的API。通过场景图来管理场景中的各种图形元素。场景图是一个树状结构,在该树状结构的各级节点表示该场景中的各种图形元素。将由各种图形元素形成的一个场景的整体称为一个虚拟空间。在这个虚拟空间中的图形元素包括:几何体的定义数据,几何显示时的颜色、材质、透明度等属性,背景颜色,光线类型,场景的作用范围,视点、投影面及投影类型,对几何体的坐标变换等。 Java3D与Java一样对各种功能的组织同样采用父类、子类、对象实例的方式。Java3D中规定了在一个虚拟场景空间中各种图形元素的表示符号及虚拟场景空间的组织结构。在一个虚拟空间中可以包含多个Local节点。一个Local节点表示一个子场景的根节点。多个Local节点表示在该虚拟场景中有多个场景的根节点。但是在实际应用中最常使用的是在一个虚拟空间中只包含一个子场景,也就是只包含一个Local节点。在一个Local节点之下,可以包含一个到多个BranchGroup节点。每个BranchGroup 节点表示一种图形元素的集合。这种图形元素的集合主要有两种:(1)定义几何体的数据与定义该几何体的颜色、材质、透明度等外观的属性;(2)定义该几何体在显示的时候在该场景中的其他元素,如背景颜色、光源类型、视点位置与观察方向、投影平面的位置、坐标变换等。在实际应用中,最常用的是一个Local 节点下只含有一个BranchGroup节点。

在一个Local节点下只含有一个BranchGroup节点情况下,必须定义一个Shape3D对象,在该对象中定义几何体的数据与几何体的颜色、材质、透明度等外观显示特性,该Shape3D对象一般加入在一个TransformGroup类的节点中。在一个BranchGroup 节点之下,可以包含多个TransformGroup节点。每个TransformGroup节点可以包含以各种或多种几何体的定义。也可以不包含几何体的定义信息。但是一个TransformGroup节点必须包含一个或多个Transform3D对象,表示对TransformGroup 节点中定义的几何体所进行的坐标变换。一个Transform3D对象表示对几何体进行平移、旋转、变比等坐标变换中的一种,多个Transform3D对象的组合形成一个总的坐标变换矩阵,这个总的坐标变换矩阵就属于包含这些Transform3D对象的TransformGroup节点。如果该TransformGroup节点中没有定义几何体,则这种坐标变换是针对于第一次定义的几何体。如果在一个TransformGroup节点中没有定义任何的坐标变换,则该TransformGroup节点拥有默认的坐标变换矩阵,但该矩阵为单位矩阵,表示对几何体不进行任何变换。对于坐标变换的具体方法与内容将会在后面章节中详细介绍。View的功能主要是实现在虚拟场景中设置视点与观察方向。Canvas3D主要用来定义一种能够显示三位物体投影的画布。Screen3D主要将画布上三位物体的投影显示在显示器上。 Alpha节点元素对象提供了一种将一个时间值转换成Alpha

java3d官方教程

Java 3D API官方教程[翻译一] 开始学习Java3D API 1 第一章、入门 本章目标: 学习了本章之后,你能: ?能用一些基本术语解释什么是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,或者二者兼备。

JAVA3D学习系列(11)---外部复杂形体的调用

JAVA3D学习系列(11)---外部复杂形体的调用 (Wavefront的OBJ,Lightwave的LWS和LWO,WRL,DWG,3DS) 我们可以利用前面介绍的方法生成我们所需要的基本形体, 生成点、线、平面。但有的时候,我们需要用到其它格式的三 维形体,如VRML2.0格式的图形文件,AUTOCAD绘出的DWG格式的三维形体,3DS MAX绘制出的复杂形体。对于这些形体,我们可 以非常方便地将其用到JAVA3D程序中去。下面我们介绍一些图形 格式在JAVA3D中的应用方法。 一. Wavefront的OBJ格式的图形文件的调用 1. OBJ格式图形的简单调用 JAVA3D编译环境所带的UTILITY有两个LOADER,一个可用来 调用Wavefront软件的OBJ格式的三维图形格式文件,一个可用来 调用Lightwave软件的LWS及LWO格式的三维图形格式文件。 假设我们有一个OBJ格式的文件(JAVA3D附带有两个OBJ,文 件名分别为galleon.obj和p51_mustang.obj,以及调用它们的一 个程序ObjLoad.java)。 我们编写的第一个程序Obj1.java介绍了OBJ图形的调用方法。 程序的便宜方法: javac Obj1.java 程序的运行方法(假设图形在同一目录): java Obj1 galleon.obj //Obj1.java import com.sun.j3d.loaders.objectfile.ObjectFile; import com.sun.j3d.loaders.ParsingErrorException; import com.sun.j3d.loaders.IncorrectFormatException; import com.sun.j3d.loaders.Scene; import java.io.*; import java.applet.Applet; import java.awt.BorderLayout; import com.sun.j3d.utils.applet.MainFrame; import com.sun.j3d.utils.universe.*; import javax.media.j3d.*; import javax.vecmath.*; public class Obj1 extends Applet { private String filename = null;

基于Java3D的三维模型交互设计系统的开发与应用

25卷第11期2008年11月 微电子学与计算机 M ICROEL ECTRON ICS &COMPU TER Vol. 25No. 11November 2008 收稿日期:2007-11-19 基金项目:广东省梅州市科技局自然科学基金项目(07K J17 基于J ava3D 的三维模型交互设计系统的开发与应用 丘威 (嘉应学院计算机科学与技术系, 广东梅州514015 摘要:首先概括地介绍了Java3D 技术在三维模型交互设计的应用. 提出了采用Java3D 用于虚拟三维模型的描述, 通过远端客户机读取服务端客户上传的三维图形数据, , 使用程序提供的绘图工具对图形进行编辑并将结果保存到服务端相应的文件, 间的信息交互, 共享数字化的设计信息, 使Internet 关键 词:Java3D ;VRML ;Web3D ; 虚拟场景 中图分类号:TP129::-7180(2008 11-0195-04 Application of 3D Model Interaction Design System B ased on Java 3D Q IU Wei

(Department of Computer Science and Technology , Jiaying University , Meizhou 514015, China Abstract :This paper introduced the Java3D application in 3D model interaction design , adopt the Client/Server structure and distributing computing model to design the system structure , put forward the method to catch the 3D scene object in 2stance and presented the wandering method to implement virtual scene in the Java3D scene. With Java3D , implement the interaction 3DM scene with the user , and implement a part of detail. K ey w ords :Java3D ;VRML ;Web3D ;virtual scene 1引言 Java3D 是Sun 定义的用于实现3D 显示的编程 接口,Java3D 提供了基于Java 的上层接口. Java3D 把Open G L 和Direct X 这些底层技术包装在Java 接口中. 这种全新的设计使3D 技术变得不再繁琐并且可以加入到J 2SE 、J 2EE 的整套架构, 这些特性保证了Java3D 技术强大的扩展性. 文中提出了采用Java3D 用于三维模型的描述, 采用Java3D 实现虚拟 三维模型交互显示, 实现与用户交互的虚拟三维交 互建模实现方案, 本系统是通过远端客户机读取服务端客户上传的三维图形数据, 并在Web 页上对三维格式的机械设计图、建筑模型图等等进行还原, 不同地域间的用户不仅可以在终端机器上完成对三维 模型实体的浏览、缩放、移动、操作, 还可以使用程序提供的绘图工具对图形进行编辑并将结果保存到服务端相应的文件, 通过对服务器端文件的读写操作来实现用户之间的信息交互, 有助于减少工程师、建筑师和其他用户之间进行交流的障碍, 并使他们可以更多地共享数字化的设计信息, 使Internet 成为设计工作的主要协作平台. 2用Java3D 描述系统模型

JAVA3D的网络三维技术的设计与实现论文

基于Java3D的网络三维技术的设计与实现 摘要:互联网的出现及飞速发展使IT业的各个领域发生了深刻的变化,它必然引发一些新技术的出现。3D图形技术并不是一个新话题,在图形工作站以至于PC机上早已日臻成熟,并已应用到各个领域。然而互联网的出现,却使3D图形技术发生了和正在发生着微妙而深刻的变化。Web3D 协会(前身是VRML协会)最先使用Web3D术语,这一术语的出现反映了这种变化的全貌,没有人能严格定义Web3D,在这里我们把Web3D理解为:互联网上的3D图形技术,互联网代表了未来的新技术,很明显,3D图形和动画将在互联网上占有重要的地位。 Java3D API是Sun定义的用于实现3D显示的接口。使用Java 的重要理由之一是它的平台无关性。Java3D提供了基于Java的上层接口。Java3D把OpenGL和DirectX这些底层技术包装在Java接口中。这种全新的设计使3D技术变得不再繁琐并且可以加入到J2SE、J2EE的整套架构,这些特性保证了Java3D技术强大的扩展性 本文以Java3D为开发平台,利用Java语言强大的网络功能,实现了在网页上对3D动画进行显示和操作。 关键字:Java3D、Web3D、三维 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 matured, 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 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 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 Java 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

JAVA3D学习系列(17)--动画的生成(下)

JAVA3D学习系列(17)--动画的生成(下) 汕头大学机电系张杰(jzhang@https://www.wendangku.net/doc/d79544308.html,) 一. TransparnecyInterpolator对象 TransparencyInterpolator对象的构造函数有两个: public TransparencyInterpolator(Alpha alpha, TransparencyAttributes target) public TransparencyInterpolator(Alpha alpha, TransparencyAttributes target, float minimumTransparency, float maximumTransparency) 它的方法有: public void setMinimumTransparency(float transparency) public float getMinimumTransparency() public void setMaximumTransparency(float transparency) public float getMaximumTransparency() public void setTarget(TransparencyAttributes target) public TransparencyAttributes getTarget() public void processStimulus(Enumeration criteria) 利用这个对象,我们可以在给定的时间内,使某一个形体的透明度按照Alpha提供的方式在两个数值之间变化,VRML语言中我们可以用ScalarInterpolator节点来实现同样的效果。 如果我们使用的是第一个构造函数,则透明度的最大值为1.0f, 最小值为0.0f。 下面是一个应用此方法的JAVA3D程序和一个相对应的VRML程序。为了看出透明的效果,我们设定背景为白色。 //Tra.java import java.applet.Applet; import java.awt.BorderLayout; import com.sun.j3d.utils.applet.MainFrame; import com.sun.j3d.utils.image.TextureLoader; import com.sun.j3d.utils.universe.*; import com.sun.j3d.utils.geometry.*; import javax.media.j3d.*; import javax.vecmath.*; public class Tra extends Applet {

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。 所以:他就是将许多对象安放在这个虚拟空间的过程,在设置各个方面的属性,如:形状,位置,外观,贴图,透明效果等;再在三维环境下设置灯光,雾,背景,声音等。最后定义我们自己的观察角度,最终达到效果。 基本形体的生成

如何搭建java3d环境 (图)

Netbeans下如何搭建java3D环境(图) 摘要 在Netbeans IDE 工具下搭建java3D的开发环境主要有三步:一是安装java3d需要的包,二是在netbeans导入java3d需要的包,三是运行java3d的测试程序;最终Netbeans能够运行显示出“Java https://www.wendangku.net/doc/d79544308.html,”的3D效果图像,如下图1所示: 图1 Java https://www.wendangku.net/doc/d79544308.html,的3D效果图像 1.搭建步骤: 1.1下载java3d-1_5_1-windows-i586.exe安装包并安装到电脑; 1)、下载地址:https://www.wendangku.net/doc/d79544308.html,/file/c2k157vw#java3d-1-5-1-windows-i586.exe。2)、安装java3d-1_5_1-windows-i586.exe,默认路径为:C:\Program Files\Java\Java3D\1.5.1。 图2 java3d-1_5_1-windows-i586.exe默认安装路径

1.2 新建工程,导入java3d的3个包j3dcore.jar、j3dutils.jar、vecmath.jar 1)、选择文件>新建项目>Java>Java 应用程序,如下图3填写项目名称“Java3D”,点击完成。 图3 新建Java 3 工程 2)、导入java3d 的3个文件 操作:如图4鼠标右击库>添加JAR/文件夹,如图5添加3个jar文件包 图4

图5 3)、如图6、图7,鼠标右击“java3d>新建>Java类”填写“Java3dTest”新建java 测试类Java3dTest.java,并将Java3dTest类中的源码全部替换为以下源码: 图 6

Java3D入门资料

Java3D入门资料 Java 2008-06-30 18:49:35 阅读723 评论2字号:大中小订阅 以下程序说明了显示3D物体的基本步骤: 1.创建一个用来容纳你的场景的虚拟宇宙(Virtual Universe) 2.创建一个用来放置一组物体的数据结构 3.向组中添加物体 4.放置观察者(Viewer)使之面对物体 5.将物体组添加至宇宙 例: import com.sun.j3d.utils.universe.SimpleUniverse; import com.sun.j3d.utils.geometry.ColorCube; import com.sun.j3d.utils.geometry.Sphere; import javax.media.j3d.BranchGroup; public class Hello3d{ public Hello3d() { SimpleUniverse universe=new SimpleUniverse(); BranchGroup group=new BranchGroup(); group.addChild(new ColorCuble(0.3)); universe.getViewingPaltform().setNominalViewingTransform(); universe.addBranchGraph(group); } public static void main(String[] args){ new Hello3d(); }

点亮这个世界 这个例子说明了怎样显示一个被红光照亮的球 import coum.sun.j3d.utils.geometry.*; import com.sun.j3d.utils.universe.*; import javax.media.j3d; import javax.vecmath.*; public class Ball{ public Ball(){ SimpleUniverse universe=new SimpleUniverse(); //创建宇宙 BranchGroup group=new BanchGroup(); //创建容纳物体的结构 Sphere sphere=new Sphere(0.5f); //创建一个球体并加入到物体组 group.addChild(sphere); Color3f light1Colo=new Color3f(1.8f,0.1f,0.1f); //创建一个从在点延伸100米的红色光源 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 DirectinalLight(light1color,light1Direction); light1.setinluencingBounds(bounds); group.addChild(light1); universe.getViewingPlatform().setNominalViewingTransform(); // 注视球体 universe.addBranchGraph(group); } public static void main(String[] args){new Ball();}

相关文档