Java 3D のセットアップ

Java 3D とは、Sun Microsystemes が提供している Java Platform 上の 3D 描画用 API セットです。
ここでは Java 3D をセットアップして、サンプルプログラムを実行するまでの過程を説明します。

Applet でプログラムを体験できます。
実行は次のリンクをクリックして下さい。
アプレットを実行しようとするとセキュリティの警告画面が表示されますが、解除して下さい。
Hello Applet3D
このページ(各面に色が設定されたキューブの回転)が描画されたら、Java 3D が実行可能な状態です。

Java でも3Dの分野は変革が激しく、バージョンが変わるとエラーになったり、動かなくなることがあります。
このページを作成する時点で最新のバージョンをインストールしましたが、古いバージョンや新しいバージョンには対応しない場合があるので留意して下さい。

前田稔の超初心者のプログラム入門

セットアップの手順

  1. Java 3D を動かすには、Java2 の基本開発環境がインストールされていなければなりません。
    Java のインストール Java2 を動かす を参照して下さい。
  2. Java 3D のインストールは、次のページから行います。
    Java 3DTM Downloads: Release Builds
    私のマシンのプロセッサは Intel(R) Core(TM)2 Quad CPU を使用しているので Installers から j3d-1_5_2-windows-i586.exe を選んでネットから直接インストールしました。
    既定値では "C:\Program Files (x86)\Java\Java3D\1.5.2\" にインストールされます。
    AMD(Advanced Micro Devices)のプロセッサを使っているときや Linux(OpenGL)を使うときは、該当するものを選択して下さい。
    インストールは簡単で、手順に従って応答するだけです。
  3. 次に Example programs source code から j3d-examples-1_5_2-src.zip を選んで保存しておきましょう。
    この中には沢山のサンプルプログラムが格納されています。

サンプルプログラムの実行

  1. 次のソースプログラムを C:\TMP\ のフォルダーなどに HelloApplet.java の名前で格納して下さい。
    Java Applet を使った方が簡単なので Applet を継承していますが、コマンドラインから普通の Java と同様に実行することが出来ます。
    //★ Applet で立方体を回転する    前田 稔
    import java.applet.Applet;
    import java.awt.BorderLayout;
    import java.awt.event.*;
    import java.awt.GraphicsConfiguration;
    import com.sun.j3d.utils.applet.MainFrame;
    import com.sun.j3d.utils.geometry.ColorCube;
    import com.sun.j3d.utils.universe.*;
    import javax.media.j3d.*;
    import javax.vecmath.*;
    
    public class HelloApplet extends Applet
    {   private SimpleUniverse u = null;
        public BranchGroup createSceneGraph()
        {   BranchGroup objRoot = new BranchGroup();
            TransformGroup objTrans = new TransformGroup();
            objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
            objRoot.addChild(objTrans);
    
            objTrans.addChild(new ColorCube(0.4));
            Transform3D yAxis = new Transform3D();
            Alpha rotationAlpha = new Alpha(-1, 4000);
            RotationInterpolator rotator =
                new RotationInterpolator(rotationAlpha, objTrans, yAxis, 0.0f, (float) Math.PI*2.0f);
            BoundingSphere bounds =
                new BoundingSphere(new Point3d(0.0,0.0,0.0), 100.0);
            rotator.setSchedulingBounds(bounds);
            objRoot.addChild(rotator);
    
            objRoot.compile();
            return objRoot;
        }
    
        public HelloApplet() {  }
    
        public void init()
        {   setLayout(new BorderLayout());
            GraphicsConfiguration config =
            SimpleUniverse.getPreferredConfiguration();
    
            Canvas3D c = new Canvas3D(config);
            add("Center", c);
    
            BranchGroup scene = createSceneGraph();
            u = new SimpleUniverse(c);
    
            u.getViewingPlatform().setNominalViewingTransform();
            u.addBranchGraph(scene);
        }
    
        public void destroy()
        {   u.cleanup();  }
    
        public static void main(String[] args)
        {   new MainFrame(new HelloApplet(), 256, 256);  }
    }
    
  2. サンプルプログラムをコンパイルして HelloApplet.class を作成します。
    コマンドプロンプトを立ち上げて、次のコマンドを実行します。
    Microsoft Windows [Version 6.1.7600]
    Copyright (c) 2009 Microsoft Corporation.  All rights reserved.
    
    C:\Users\maeda>cd c:\tmp
    
    c:\TMP>javac HelloApplet.java
    
    c:\TMP>
    
  3. サンプルプログラムを動かします。
    各面に色を設定した立方体が回転しながら描画されたら完成です。
    運が良ければ、これでセットアップは終了なのですが。 (^_^;)
    c:\TMP>java HelloApplet
    
    c:\TMP>
    

Java3D システムのエラー

  1. コンパイル時に com.sun.* の行に次のエラーが表示される。
    Java3D のライブラリが import 出来ない場合に表示されるエラーです。
    Java3D を普通にインストールすれば OK のはずなのですが、何故かこのエラーが表示されることがあります。 (^_^;)
    対処の方法は、環境変数 classpath を設定して下さい。
    com.sun.j3d.utils.geometry は存在しません。
  2. 「コントロールパネル/システム/詳細設定/環境変数/システム環境変数」から classpath に次の値を設定します。
    .;C:\Program Files (x86)\Java\Java3D\1.5.2\lib\ext\;C:\Program Files (x86)\Java\Java3D\1.5.2\bin\
    先頭の「.;」は現在作業中のカレントディレクトリです。
    「C:\Program Files (x86)\Java\Java3D\1.5.2\lib\ext\;」は Java3D のライブラリです。
    「C:\Program Files (x86)\Java\Java3D\1.5.2\bin\」は Java3D の DLL のフォルダーです。
    Windows や Java3D のバージョンによりフォルダー名が変わるので、マイコンピュータ(Windows Explorer)で確認して下さい。
    直接タイプすると全角文字や空白でミスル恐れがあるので、マイコンピュータで表示してコピー&ペーストするのが無難です。
    Jcpad の設定 も参考にして下さい。
  3. 設定した直後では、環境変数が反映していない場合があります。
    コマンドプロンプトから SET コマンドで確認して下さい。
        Microsoft Windows [Version 6.1.7600]
        Copyright (c) 2009 Microsoft Corporation.  All rights reserved.
    
        C:\Users\maeda>set
        ALLUSERSPROFILE=C:\ProgramData
        APPDATA=C:\Users\maeda\AppData\Roaming
        classpath=.;C:\Program Files (x86)\Java\Java3D\1.5.2\lib\ext\;C:\Program Files (
        x86)\Java\Java3D\1.5.2\bin\
            ・・・
        C:\Users\maeda>
        
  4. 実行時に表示されるエラーです。
    実行する class ファイルが見つからない場合に表示されます。
    classpath 環境変数の先頭に「.;」が設定されていることを確認して下さい。
        Exception in thread "main" java.lang.NoClassDefFoundError: HelloUniverse/class
        Caused by: java.lang.ClassNotFoundException: HelloUniverse.class
                at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
                at java.security.AccessController.doPrivileged(Native Method)
                at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
                at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
                at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
                at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
        Could not find the main class: HelloUniverse.class.  Program will exit.
        
  5. 2012/01/27 に Java 3D でコンパイルエラーが表示されて実行出来なくなりました。
    エラーの状況です。
        Line.java:5: パッケージ javax.media.j3d は存在しません。
        import javax.media.j3d.*;
        ^
        Line.java:6: パッケージ javax.vecmath は存在しません。
        import javax.vecmath.*;
        ^
        Line.java:7: パッケージ com.sun.j3d.utils.universe は存在しません。
        import com.sun.j3d.utils.universe.*;
        ^
        
    色々調べたのですが原因が解らず、Java3D/1.5.2 をアンインストールして再インストールすると動くようになりました。
    ネットでも同様の現象の書き込みがあり、どうしても動かない時は試してみて下さい。

超初心者のプログラム入門(Java2)