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对