📄 universemanager.java
字号:
package org.j3de.ui.impl;
import java.util.List;
import javax.media.j3d.Behavior;
import javax.media.j3d.BranchGroup;
import javax.media.j3d.Canvas3D; import javax.media.j3d.Group;
import javax.media.j3d.InputDevice; import javax.media.j3d.Locale; import javax.media.j3d.Node; import javax.media.j3d.PhysicalBody;import javax.media.j3d.PhysicalEnvironment; import javax.media.j3d.View;
import javax.media.j3d.ViewPlatform;import javax.media.j3d.VirtualUniverse;
import org.j3de.interfaces.Environment;
public class UniverseManager extends VirtualUniverse {
private static UniverseManager manager;
private Locale locale;
private Canvas3D canvas3d;
private View view;
private PhysicalEnvironment env; private BranchGroup world_object_group;
private BranchGroup world;
private BranchGroup behaviors;
private int minimumFrameCycleTime;
public UniverseManager(Canvas3D canvas3d, List devices, int maxFrames) {
manager = this;
this.canvas3d = canvas3d;
view = new View(); view.addCanvas3D(canvas3d);
locale = new Locale(this);
behaviors = new BranchGroup();
behaviors.setCapability(Group.ALLOW_CHILDREN_WRITE);
behaviors.setCapability(Group.ALLOW_CHILDREN_EXTEND);
world_object_group = new BranchGroup();
world_object_group.setCapability(Group.ALLOW_CHILDREN_READ);
world_object_group.setCapability(Group.ALLOW_CHILDREN_WRITE);
world_object_group.setCapability(Group.ALLOW_CHILDREN_EXTEND);
world_object_group.addChild(behaviors);
locale.addBranchGraph(world_object_group);
if (maxFrames != 0)
minimumFrameCycleTime = 1000 / maxFrames;
else
minimumFrameCycleTime = 0;
int sensorCount = 0; for (int i=0; i<devices.size(); i++) sensorCount += ((InputDevice)devices.get(i)).getSensorCount(); env = new PhysicalEnvironment(sensorCount); int sensorIndex = 0; for (int i=0; i<devices.size(); i++) { InputDevice device = (InputDevice)devices.get(i); env.addInputDevice(device); for (int j=0; j<device.getSensorCount(); j++) { env.setSensor(sensorIndex, device.getSensor(j)); sensorIndex++; } } view.setPhysicalEnvironment(env); }
public void setEnvironment(Environment environment) {
if (world != null) {
for (int i=0; i<world_object_group.numChildren(); i++) {
if (world_object_group.getChild(i) == world)
world_object_group.removeChild(i);
}
}
world = environment.getWorldObject();
if (!world.isCompiled()) world.setCapability(BranchGroup.ALLOW_DETACH); world.compile();
// This will affect framerate, even if minimumFrameCycleTime is much higher than
// current frame cycle time. If it is 0 : don't set it at all ...
if (minimumFrameCycleTime != 0)
view.setMinimumFrameCycleTime(minimumFrameCycleTime);
synchronized (world) { world_object_group.addChild(world);
} view.setPhysicalBody(environment.getPhysicalBody()); view.attachViewPlatform(environment.getViewPlatform()); }
public void addBehavior(Behavior behavior) {
BranchGroup bg = new BranchGroup();
bg.addChild(behavior);
bg.compile();
behaviors.addChild(bg);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -