📄 point5.java
字号:
package com.java3d.test;
import java.applet.Applet; //可作为小程序应用
import java.awt.BorderLayout; //窗体布局管理器
import com.sun.j3d.utils.applet.MainFrame; //建立主窗体用
import com.sun.j3d.utils.universe.*; //Java3D空间类
import com.sun.j3d.utils.geometry.*; //可直接调用的形状
import javax.vecmath.*; //矢量运算引用
import javax.media.j3d.*; //Java3D核心引用@SuppressWarnings("serial")
public class Point5 extends Applet {
private BranchGroup createSceneGraph(){
BranchGroup objRoot = new BranchGroup();
//建立子图根节点
objRoot.addChild(createObject());
//将createObject子程序建立的Group作为字节点
objRoot.compile();
//编译3D场景
return objRoot;
//返回该节点
}
private Group createObject(){
Transform3D t = new Transform3D();
TransformGroup objTrans = new TransformGroup(t);
//创建变换组,并用Transform3D三维变换组来初始化
objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); //设置变换组为可改变状态
Shape3D shape = new pointShape();
//pointShape是外部函数,内容为建立六个位置颜色各不同的点
//pointShape我就不写了,不用六个点也可以,只要是Shape3D的形状就行
objTrans.addChild(shape);
//将这组点放入变换组中
//这里的shape可以换成别的已经建立好的形状如com.sun.j3d.utils.geometry.ColorCube
Transform3D yAxis = new Transform3D();
//三维变换组,这里打算让点围绕Y轴转动
Alpha rotationAlpha = new Alpha(-1,Alpha.INCREASING_ENABLE,0,0,4000,0,0,0,0,0);
/*
* Alpha类对象用于创建随时间变化的功能。
* Alpha(int loopCount, long increasingAlphaDuration)
* 这个构造函数仅仅把loopCount和increasingAlphaDuration作为其参数,
* 而对所有其它的参数则赋以默认值。这导致了Alpha对象产生从0递增到1之间的值。
* loopCount参数提供了循环次数。如果loopCount是–1, alpha对象则无限循环下去。
* 从0增长到1的时间则在第二个参数中以毫秒的形式指定。
* 参数:
* loopCount – 运行这个alpha对象的次数。值为 -1时则作无限循环。
* increasingAlphaDuration – alpha从0增长到1的时间,以毫秒形式指定。
*/
RotationInterpolator rotator = new RotationInterpolator(rotationAlpha,objTrans,yAxis,0.0f,(float)Math.PI*2.0f);
/*
* RotationInterpolator(Alpha alpha, TransformGroup target)
* 这个类定义了一个行为,能在一对角度(指定的Alpha对象所产生的值)之间线性地插入修改其目标TransoformGroup的旋转组件。
* 这个插入的角度就用于生成一个变换。
* 参数:
* alpha –根据函数的引用的不同而时间也不同。
* target – 要修改的TransformGroup对象
*/
BoundingSphere bounds = new BoundingSphere(new Point3d(0.0,0.0,0.0),50.0);
//定义可视范围
rotator.setSchedulingBounds(bounds);
//将旋转器为设定可视范围
objTrans.addChild(rotator);
//将行为添加到变化组中
return objTrans;
//返回该变化组
}
public Point5(){
//构造函数,建立对象时执行
setLayout(new BorderLayout());
//设置布局器为java.awt.BorderLayout
Canvas3D c =new Canvas3D(SimpleUniverse.getPreferredConfiguration());
//创建3D画布,并应用显卡环境获取参数
add("Center",c);
//将画布添加到主窗体
BranchGroup scene = createSceneGraph();
//将Group根节点获取到scene
SimpleUniverse u = new SimpleUniverse(c);
//用画布创建空间模型
u.getViewingPlatform().setNominalViewingTransform();
////切换模型到位图模式迫使我们能看得到3D场景
u.addBranchGraph(scene);
//将scene场景放入空间中
}
public static void main(String[] args){
new MainFrame(new Point5(),400,400);
//用主程序创建基本窗体,建立对象,自动运行构造函数进行各项生成
}}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -