java3D

  • 格式:docx
  • 大小:89.61 KB
  • 文档页数:16

Java3d整理

Java3d基础

环境配置

1.1安装JDK

1.2安装官网下载最新版本

简单实例

2.1新建java项目

2.2导入基本jar包,jar包下载

2.3编写代码

package measoft.java3d.base;

importjava.applet.Applet;

importjava.awt.BorderLayout;

importjava.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中

*

*

* @authorJ_nan

*

*/

publicclassMyConeextends Applet {

publicBranchGroupcreateSceneGroup(){

/**

* 一、 1.创建一个包含对象的数据结构2.生成坐标系3.将坐标系添加到跟节点上

4.设置场景的有效范围

*/

BranchGroupobjRoot = newBranchGroup();

TransformGroupobjTrans = newTransformGroup();

objRoot.addChild(objTrans);

BoundingSphere bounds = newBoundingSphere(new

Point3d(0.0,0.0,0.0),100.0);

/**

* 二、1. 创建背景颜色 2.设置背景边界 3.添加背景到场景中

*/

Color3f bgColor = newColor3f(0.0f,0.0f,0.0f);

Background bg = newBackground(bgColor);

bg.setApplicationBounds(bounds);

objRoot.addChild(bg);

/**

* 三、1. 添加平行光 2.给指定的bounds设定光的范围界限

*/

Color3f directionalLightColor = newColor3f(1.f,1.f,1.f);

Vector3f vec = newVector3f(0.f,0.f,-1.0f);

DirectionalLightdirectionalLight =

newDirectionalLight(directionalLightColor,vec);

directionalLight.setInfluencingBounds(bounds);

objRoot.addChild(directionalLight);

/**

* 四、1.设置外观 2.设置材料 3.生成基本圆锥

*/ Appearance app = newAppearance();

Material material = newMaterial();

material.setDiffuseColor(new Color3f(10.f,1.0f,0.0f));

app.setMaterial(material);

Cone cone = newCone(.5f,1.0f,1,app);

objRoot.addChild(cone);

/**

* 五、返回objRoot

*/

returnobjRoot;

}

publicMyCone(){

setLayout(newBorderLayout());

GraphicsConfigurationconfig =

SimpleUniverse.getPreferredConfiguration();

/**

* 第一步:Canvas3D类提供了一个3D渲染绘图画布,构造并初始化一个新的Canvas3D对象

*/

Canvas3D c = new Canvas3D(config);

/**

* 第二步:创建虚拟空间

*/

SimpleUniverse u = newSimpleUniverse(c);

/**

* 第三步:构建内容子图

*/

BranchGroup scene = createSceneGroup();

/**

* 第四步:编译内容子图

*/

pile();

/**

* 第五步:将内容子图插入SimpleUniverse的Locale中

*/

u.addBranchGraph(scene);

add("Center",c);

//安放观察点

u.getViewingPlatform().setNominalViewingTransform();

}

publicstaticvoid main(String[] args) { newMainFrame(newMyCone(),400,300);

}

}

运行效果如图:

编写JAVA3D程序的一般步骤:

A. SceneGraphObject的子类是构建场景图的基石。基本的Java 3D程序由7个步骤组成,如下所示。这7个步骤就是编写Java 3D 程序的一般步骤。这些步骤可以用来编写许多有用的Java3D 程序。

(1) 创建一个Canvas3D对象。

(2) 创建一个VirtualUniverse对象。

(3) 创建一个Local对象。将它与VirtualUniverse对象联系起来。

(4) 构造视野子图。

a. 创建一个View对象

b. 创建一个ViewPlatform对象。

c. 创建一个PhysicalBody对象

d. 创建一个PhysicalEnvironment对象

e. 将ViewPlatform、PhysicalBody、PhysicalEnvironment和Canvas3D对象联系到View对象上

(5) 构造内容子图

(6) 编译子图

(7) 将子图插入到Locale

B. 使用了SimpleUniverse对象使基本步骤更简单。下面列出了基本步骤,其中的第(2)步取代了原来的第(2)~(4)步

(1) 创建一个Canvas3D对象

(2) 创建并定制一个SimpleUniverse对象,该对象引用前一步创建的Canvase3D对象。

(3) 构建内容子图

(4) 编译内容子图 (5) 将内容子图插入SimpleUniverse的Locale中

JAVA 3D 常用类介绍

SimpleUniverse类

使用SimpleUniverse类进行Java3D编程可以显著减少创建视野子图所需要的时间和工作量。使程序员可以有更多的时间来考虑场景的内容。

这个类创建了一个最小的用户环境以使Java 3D程序可以运行,创建一个视野子图所必须的所有对象。明确地说,这个类创建了Locale、VirtualUniverse、ViewingPlatform和Viewer对象(都具有特定的默认值)。这些对象默认地被设置为恰当的值,使它们可以构成一个合适的视野子图。SimpleUniverse提供了大部分Java 3D应用程序所必须的功能。Viewer和ViewingPlatform是方便的工具类。这些类使用了View和ViewPlatform核心类

SimpleUniverse():创建一个简单的虚拟空间

SimpleUniverse(Canvas3D canvas3D):创建一个简单的虚拟空间,并指定一个Canvas3D参数

SimpleUniverse对象创建了一个完整的虚拟世界视野子图。视野子图包括一个图像板(image plate)图像板是一个概念上的矩形,经过渲染系统渲染得到的图像就投影到这个平面上。Canvas3D对象就是显示器上窗口中显示的衣服图片对应的对象,同时它可以认为就是图像板块

默认的,图像板剧中放置于SimpleUniverse的原点。默认的方向是与Z轴垂直。从这个位置,X轴水平穿过图像板,右侧是正半轴。Y轴垂直地穿过图像板,上面是正半轴。结果点(0,0,0)位于图像版的正中间

查看API

BranchGroup类

该类型的对象用于构建场景图。BranchGroup的实例是子图的根节点。BranchGroup对象是Locale唯一允许的子节点对象。BranchGroup对象可以拥有多个子节点。BranchGroup对