next up previous
Next: 6.8 Background Up: 6 Java3Dのプログラミング Previous: 6.6.2 影響範囲(Bounds)

6.7 Lightwave

/java/jdk1.4/demo/java3d/LightWave> ls -1
README.txt
Viewer.class
Viewer.java
ballcone.lws
greenball.lwo
redcone.lwo

走らせ方:

% javac Viewer.java
% java Viewer ballcone.lws
Viewer.javaは次のようになっている.
/**
<applet align=middle
code="Viewer.class" width=256 height=256>
</applet>
 */
import java.applet.Applet;
import java.awt.*;

import javax.media.j3d.BranchGroup;
import javax.media.j3d.Canvas3D;
import javax.media.j3d.Transform3D;
import javax.media.j3d.TransformGroup;
import javax.media.j3d.View;
import javax.vecmath.Matrix4d;

import com.sun.j3d.loaders.lw3d.Lw3dLoader;
import com.sun.j3d.loaders.Loader;
import com.sun.j3d.loaders.Scene;
import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.utils.universe.SimpleUniverse;

public class Viewer extends Applet {
    
  public Viewer(String filename) {
    Loader lw3dLoader =
      new Lw3dLoader(Loader.LOAD_ALL);
    Scene loaderScene = null;
    try {
      loaderScene = lw3dLoader.load(filename);
    }
    catch (Exception e) {
      System.err.println(
        "Exception loading file: " + e);
      System.exit(1);
    }
    setLayout(new BorderLayout());
    GraphicsConfiguration config =
      SimpleUniverse.getPreferredConfiguration();

    Canvas3D c = new Canvas3D(config);
    add("Center", c);
    SimpleUniverse u = new SimpleUniverse(c);
    BranchGroup sceneRoot = new BranchGroup();
    View theView = u.getViewer().getView();
    theView.setBackClipDistance(50000f);
    if (loaderScene.getSceneGroup() != null) {
      TransformGroup viewGroups[] =
        loaderScene.getViewGroups();
      Transform3D t = new Transform3D();
      viewGroups[0].getTransform(t);
      Matrix4d m = new Matrix4d();
      t.get(m);
      m.invert();
      t.set(m);
      TransformGroup sceneTransform =
        new TransformGroup(t);
      sceneTransform.addChild(
        loaderScene.getSceneGroup());
      sceneRoot.addChild(sceneTransform);
    }
    u.addBranchGraph(sceneRoot);
  }

  public static void main(String args[]) {
    if (args.length < 1) {
      System.err.println(
        "Usage:\n    java Viewer <filename>\n" +
        "where <filename> is a Lightwave 3D " +
        "scene file");
      System.exit(1);
    }
    new MainFrame(new Viewer(args[0]), 500, 500);
  }
}
図 13: LightWave
\includegraphics[width=6.0cm]{/home/inaba/eps/lecture/fig/LightWave3D.eps}


generated through LaTeX2HTML. M.Inaba 平成18年5月7日