Java 3D で点を描画

Java 3D で Point(点)を描画します。

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

プログラムの作成

  1. メモ帳などでタイプして Point.java の名前で保存して下さい。
    //★ Java3D で Point(点)を描画する
    import java.awt.*;
    import javax.swing.*;
    import javax.media.j3d.*;
    import javax.vecmath.*;
    import com.sun.j3d.utils.universe.*;
    
    // Main Class
    public class Point extends JFrame
    {
        // main Method
        public static void main(String[] args)
        {   new Point();
        }
    
        // Constructor
        public Point()
        {   // JFrame の初期化
            super("Point test");
            setSize(300,300);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
            // Java3D関係の設定
            GraphicsConfiguration g_config = SimpleUniverse.getPreferredConfiguration();
            Canvas3D canvas = new Canvas3D(g_config);
            add(canvas);
    
            // SimpleUniverseを生成
            SimpleUniverse universe = new SimpleUniverse(canvas);
            universe.getViewingPlatform().setNominalViewingTransform();
    
            // 点(Point)の生成
            BranchGroup scene = CreateScene();
            universe.addBranchGraph(scene);
    
            // JFrame を表示
            setVisible(true);
        }
    
        // 点(Point)の生成
        private BranchGroup CreateScene()
        {   BranchGroup objRoot = new BranchGroup();
    
            // 座標を定義
            Point3d[] vertices =
            {  new Point3d(-0.4,-0.4,0.0), new Point3d(0.0,0.3,0.0), new Point3d(0.4,-0.4,0.0)  };
    
            // Point を生成
            PointArray geometry = new PointArray(vertices.length, GeometryArray.COORDINATES);
            geometry.setCoordinates(0, vertices);
    
            // BranchGroup に登録
            Shape3D shape = new Shape3D(geometry);
            objRoot.addChild(shape);
    
            return objRoot;
        }
    }
    
  2. ソースプログラムをコンパイルして class オブジェクトを実行して下さい。
    画面に小さな点(1ドット)が3個描画されたら完成です。
    1ドットの小さな点なので、ディスプレイのゴミと間違わないように注意して探して下さい。 (^_^;)

プログラムの説明

  1. Java3D で図形(形状)を定義する方法を説明します。
    基本的な図形(形状)の種類は次のとおりです。
  2. Shape3D を使って物体の形状を定義します。
    Shape3D の使用方法は次のようになります。
    1. Point3d[] 配列に頂点を定義する
    2. GeometryArray オブジェクトを生成する
    3. GeometryArray オブジェクトへ頂点座標を設定する
    4. GeometryArray を引数にして Shape3D オブジェクトを生成する
    5. addChild() メソッドで、親となるノードに Shape3D を追加する
  3. これまでのプログラムと同様に Swing を使って JFrame を継承しています。
    Java3D 用のライブラリを import します。
    main Method では Point Class をインスタンス化するだけです。
        import java.awt.*;
        import javax.swing.*;
        import javax.media.j3d.*;
        import javax.vecmath.*;
        import com.sun.j3d.utils.universe.*;
    
        // Main Class
        public class Point extends JFrame
        {
            // main Method
            public static void main(String[] args)
            {   new Point();
            }
        
  4. Point Class の Constructor です。
    これまのプログラムと同様に JFrame の初期設定を行います。
    次に Java3D の初期化です。
    GraphicsConfiguration を取得して Canvas3D を生成(インスタンス化)します。
    add(canvas); で JFrame に Canvas3D を追加します。
    SimpleUniverse(canvas) で、Java3D の標準的な描画環境を設定します。
    CreateScene() メソッドで、点(Point)を生成して、SimpleUniverse に追加します。
        // Constructor
        public Point()
        {   // JFrame の初期化
            super("Point test");
            setSize(300,300);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
            // Java3D関係の設定
            GraphicsConfiguration g_config = SimpleUniverse.getPreferredConfiguration();
            Canvas3D canvas = new Canvas3D(g_config);
            add(canvas);
    
            // SimpleUniverseを生成
            SimpleUniverse universe = new SimpleUniverse(canvas);
            universe.getViewingPlatform().setNominalViewingTransform();
    
            // 点(Point)の生成
            BranchGroup scene = CreateScene();
            universe.addBranchGraph(scene);
    
            // JFrame を表示
            setVisible(true);
        }
        
  5. Point(点)を生成する CreateScene() メソッドです。
    BranchGroup を生成して、ここに描画するシーンを設定します。
    Point3d[] 配列で Point の座標を定義します。
    new PointArray() で Point を生成します。
    new Shape3D(geometry) を生成して、addChild() メソッドで親となるノードに追加します。
        // 点(Point)の生成
        private BranchGroup CreateScene()
        {   BranchGroup objRoot = new BranchGroup();
    
            // 座標を定義
            Point3d[] vertices =
            { new Point3d(-0.4, -0.4, 0.0), new Point3d( 0.0,  0.3, 0.0), new Point3d( 0.4, -0.4, 0.0) };
    
            // Point を生成
            PointArray geometry = new PointArray(vertices.length, GeometryArray.COORDINATES);
            geometry.setCoordinates(0, vertices);
    
            Shape3D shape = new Shape3D(geometry);
            objRoot.addChild(shape);
    
            return objRoot;
        }
        
  6. CreateScene() メソッドを次のように修正して下さい。
    点(Point) のサイズが大きくなります。
    点(Point) の数を増やしてみて下さい。
        private BranchGroup CreateScene()
        {   BranchGroup objRoot = new BranchGroup();
    
            // 座標を定義
            Point3d[] vertices =
            {  new Point3d(-0.4,-0.4,0.0), new Point3d(0.0,0.3,0.0), new Point3d(0.4,-0.4,0.0)  };
    
            // Point を生成
            PointArray geometry = new PointArray(vertices.length, GeometryArray.COORDINATES);
            geometry.setCoordinates(0, vertices);
    
            PointAttributes pleft = new PointAttributes();
            pleft.setPointSize(12.0f);      // Point の大きさ
    
            // Appearance にサイズを登録
            Appearance aleft = new Appearance();
            aleft.setPointAttributes(pleft);
    
            // BranchGroup に登録
            Shape3D shape = new Shape3D(geometry, aleft);
            objRoot.addChild(shape);
    
            return objRoot;
        }
        

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