📄 simplelod.java
字号:
//SimpleLOD.java
//演示如何使用DistanceLOD对象
import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.Frame;
import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.utils.geometry.*;
import com.sun.j3d.utils.universe.*;
import javax.media.j3d.*;
import javax.vecmath.*;
public class SimpleLOD extends Applet {
public BranchGroup createSceneGraph() {
//创建根分支节点
BranchGroup objRoot = new BranchGroup();
BoundingSphere bounds = new BoundingSphere();
//创建一个可移动的组节点
TransformGroup transTG = new TransformGroup();
transTG.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
//创建Alpha对象
Alpha alpha = new Alpha (-1,
Alpha.INCREASING_ENABLE + Alpha.DECREASING_ENABLE,
0, 0, 5000, 1000, 1000, 5000, 1000, 1000);
//设置变换的轴
AxisAngle4f axisOfTra = new AxisAngle4f(0.0f,1.0f,0.0f,(float)Math.PI/-2.0f);
Transform3D axisT3D = new Transform3D();
axisT3D.set(axisOfTra);
//创建位置插值器来实现移动
PositionInterpolator transPI
= new PositionInterpolator (alpha, transTG, axisT3D, 0.0f, -35.0f);
transPI.setSchedulingBounds(bounds);
//创建目标Switch对象
Switch targetSwitch = new Switch();
//设置允许动态变化的能力
targetSwitch.setCapability(Switch.ALLOW_SWITCH_WRITE);
//创建几何体
Appearance sphereApp0 = new Appearance();
ColoringAttributes sphereCA0 = new ColoringAttributes();
sphereCA0.setColor(1.0f, 0.0f, 0.0f);
sphereApp0.setColoringAttributes(sphereCA0);
Appearance sphereApp1 = new Appearance();
ColoringAttributes sphereCA1 = new ColoringAttributes();
sphereCA1.setColor(0.0f, 0.0f, 1.0f);
sphereApp1.setColoringAttributes(sphereCA1);
//向Switch中添加几何体
targetSwitch.addChild(new Sphere(.40f, 0, 25, sphereApp0));
targetSwitch.addChild(new Sphere(.40f, 0, 15, sphereApp1));
targetSwitch.addChild(new Sphere(.40f, 0, 10, sphereApp0));
targetSwitch.addChild(new Sphere(.40f, 0, 4, sphereApp1));
//创建分界距离
float[] distances = { 5.0f, 10.0f, 20.0f};
//创建DistanceLOD对象
DistanceLOD dLOD = new DistanceLOD(distances, new Point3f());
dLOD.addSwitch(targetSwitch);
//设置有效范围
dLOD.setSchedulingBounds(bounds);
//
objRoot.addChild(transTG);
objRoot.addChild(transPI);
transTG.addChild(dLOD);
//不要忘记添加Switch对象到TG上
transTG.addChild(targetSwitch);
//设置背景
Background bg = new Background();
bg.setColor(1.0f, 1.0f, 1.0f);
bg.setApplicationBounds(bounds);
objRoot.addChild(bg);
//优化
objRoot.compile();
return objRoot;
}
public SimpleLOD() {
setLayout(new BorderLayout());
Canvas3D canvas3D = new Canvas3D(null);
add("Center", canvas3D);
BranchGroup scene = createSceneGraph();
// SimpleUniverse是一个方便的工具类
SimpleUniverse simpleU = new SimpleUniverse(canvas3D);
//向后移动视点,以看清场景内的物体
simpleU.getViewingPlatform().setNominalViewingTransform();
simpleU.addBranchGraph(scene);
}
public static void main(String[] args) {
Frame frame = new MainFrame(new SimpleLOD(), 256, 256);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -