モデルの位置を設定

モデルの位置を画面中央からずらして描画します。
また、ColorCube のX,Y,Zのスケールを伸縮して描画します。

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

プログラムの作成

  1. ColorCube を画面の上に移動して、少し回転して描画します。
    メモ帳などでタイプして Trans.java の名前で保存して下さい。
    //★ Translation で移動する
    import java.awt.*;
    import javax.swing.*;
    import javax.media.j3d.*;
    import com.sun.j3d.utils.universe.*;
    import com.sun.j3d.utils.geometry.ColorCube;
    import javax.vecmath.*;
    
    public class Trans extends JFrame
    {
        // main Method
        public static void main(String[] args)
        {   new Trans();  }
    
        // Constructor
        public Trans()
        {   // JFrame の初期化
            super("Translation");
            setSize(250,250);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
            // Java3D 関係の設定
            GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
            Canvas3D canvas = new Canvas3D(config);
            add(canvas);
    
            // SimpleUniverseを生成
            SimpleUniverse universe = new SimpleUniverse(canvas);
            universe.getViewingPlatform().setNominalViewingTransform();
    
            // Scene を生成
            universe.addBranchGraph(CreateScene());
            setVisible(true);
        }
    
        // Scene の生成
        private BranchGroup CreateScene()
        {   BranchGroup root = new BranchGroup();
    
            // 座標の移動
            Transform3D t3d = new Transform3D();
            t3d.setTranslation(new Vector3d(0.0, 0.4, 0.0));
    
            // 座標の回転
            Transform3D rotation = new Transform3D();
            rotation.setRotation(new AxisAngle4d(0.57, 0.57, -0.57, Math.PI / 4.0));
    
            // 移動*回転を設定
            t3d.mul(rotation);
            TransformGroup trans = new TransformGroup(t3d);
    
            // ColorCube を生成
            trans.addChild(new ColorCube(0.3));
            root.addChild(trans);
            return root;
        }
    }
    
  2. ソースプログラムをコンパイルしてクラスオブジェクトを実行して下さい。
    ColorCube が画面の上部に移動して、少し傾いて描画されます。

プログラムの説明

  1. このプログラムは CreateScene() メソッド以外は Point.java と同じ要領です。
    基本的な説明は Java 3D で点を描画 を参照して下さい。
  2. ColorCube を生成する CreateScene() メソッドです。
    BranchGroup を生成して、ここに描画するシーンを設定します。
    ColorCube を正面から描画したのでは、矩形にしか見えないので少し傾けて描画します。
    Transform3D を生成して setTranslation() で上部に移動します。
    t3d.setTranslation() を t3d.set() と書いても同じです。
    0.4 がY座標の移動係数です。
    続いて Transform3D を生成して setRotation() で少し回転します。
    移動係数と回転係数を掛け合わせて TransformGroup に登録します。
    座標変換を設定した TransformGroup に ColorCube をアッドして描画します。
        // Scene の生成
        private BranchGroup CreateScene()
        {   BranchGroup root = new BranchGroup();
    
            // 座標の移動
            Transform3D t3d = new Transform3D();
            t3d.setTranslation(new Vector3d(0.0, 0.4, 0.0));
            //t3d.set(new Vector3d(0.0, 0.4, 0.0));
    
            // 座標の回転
            Transform3D rotation = new Transform3D();
            rotation.setRotation(new AxisAngle4d(0.57, 0.57, -0.57, Math.PI / 4.0));
    
            // 移動*回転を設定
            t3d.mul(rotation);
            TransformGroup trans = new TransformGroup(t3d);
    
            // ColorCube を生成
            trans.addChild(new ColorCube(0.3));
            root.addChild(trans);
            return root;
        }
        

拡大・縮小

  1. ColorCube のX,Y,Zのスケールを伸縮して描画します。
    座標の回転は前回と同じです。
    setScale(new Vector3d(0.2, 0.8, 1.8)); で伸縮します。
    Xは 0.2 倍に、Yは 0.8 倍に、Zは 1.8 倍に設定しています。
    回転係数と伸縮係数を掛け合わせて TransformGroup に登録します。
    座標変換を設定した TransformGroup に ColorCube をアッドして描画します。
        // Scene の生成
        private BranchGroup CreateScene()
        {   BranchGroup root = new BranchGroup();
    
            // 座標の回転
            Transform3D t3d = new Transform3D();
            t3d.setRotation(new AxisAngle4d(0.57, 0.57, -0.57, Math.PI/4.0));
    
            // 拡大/縮小
            Transform3D scaling = new Transform3D();
            scaling.setScale(new Vector3d(0.2, 0.8, 1.8));
    
            // 回転*拡大/縮小を設定
            t3d.mul(scaling);
            TransformGroup trans = new TransformGroup(t3d);
    
            // ColorCube を生成
            trans.addChild(new ColorCube(0.4));
            root.addChild(trans);
            return root;
        }
        

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