⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 universemanager.java

📁 Java 3D Desktop Environment旨在使用Java 3D来创建一个3D桌面环境。功能包括:分布式的应用程序
💻 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 + -