■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
                      2008年07月27日

    楽しいJava講座 - 初心者から達人へのパスポート
                  vol.113

                                セルゲイ・ランダウ
 バックナンバー: http://www.flsi.co.jp/Java_text/
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■


[このメールマガジンは、画面を最大化して見てください。]


========================================================
◆ 01.3Dグラフィックスのアプリケーション開発
========================================================


では、次にこの立方体に別の移動をおこなってみましょう。

initialize()メソッドを下記のように編集してみてください。

--------------------------------------------------------
   private void initialize() {
      this.setSize(300, 200);
      this.setContentPane(getJContentPane());
      this.setTitle("平行移動したColorCube");
     
      GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
      Canvas3D canvas = new Canvas3D(config);
      SimpleUniverse universe = new SimpleUniverse(canvas);
      BranchGroup group = new BranchGroup();
      TransformGroup transGroup = new TransformGroup();
      transGroup.addChild(new ColorCube(0.3));
      Transform3D trans = new Transform3D();
      trans.setTranslation(new Vector3d(-1.0, -0.7, -5.0));
      transGroup.setTransform(trans);
      group.addChild(transGroup);
//      universe.getViewingPlatform().setNominalViewingTransform();
      group.compile();
      universe.addBranchGraph(group);
      getJContentPane().add(canvas);
   }
--------------------------------------------------------

編集が終わりましたら、保管して実行してみてください。


もうおわかりだと思いますが、このソース・コードは、立方体の位置をx軸の負の
方向に1.0だけ、y軸の負の方向に0.7だけ、さらにz軸の負の方向に5.0だけ平行移動
しています。
これは、vol.111の最初のほうで、視点をx軸の正の方向に1.0だけ、y軸の正の方向
に0.7だけ、さらにz軸の正の方向に5.0だけ平行移動したのと、ちょうど逆のことを
やっているわけですから、立方体の見え方はvol.111で視点を動かしたときと同じに
なるわけですね。


では、今度はinitialize()メソッドを下記のように編集してみてください。

--------------------------------------------------------
   private void initialize() {
      this.setSize(300, 200);
      this.setContentPane(getJContentPane());
      this.setTitle("平行移動と回転");

      GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
      Canvas3D canvas = new Canvas3D(config);
      SimpleUniverse universe = new SimpleUniverse(canvas);
      BranchGroup group = new BranchGroup();
      TransformGroup transGroup = new TransformGroup();
      transGroup.addChild(new ColorCube(0.3));
      Transform3D trans = new Transform3D();
      trans.setTranslation(new Vector3d(-2.0, -1.0, -5.0));
      transGroup.setTransform(trans);
      group.addChild(transGroup);

      TransformGroup transGroup2 = new TransformGroup();
      transGroup2.addChild(new ColorCube(0.3));
      Transform3D trans2 = new Transform3D();
      trans2.setRotation(new AxisAngle4d(1.0, 1.0, 1.0, Math.PI / 4));
      transGroup2.setTransform(trans2);
      group.addChild(transGroup2);

      universe.getViewingPlatform().setNominalViewingTransform();
      group.compile();
      universe.addBranchGraph(group);
      getJContentPane().add(canvas);
   }
--------------------------------------------------------

編集したら、保管して実行してみましょう。

平行移動した立方体と回転した立方体の2つが表示されましたね。
2つの立方体はそれぞれ別々のグループ(TransformGroupオブジェクト)の子
になっており、それぞれのグループには別々の変換(一方は平行移動で他方は回転)
が設定されているので、このように別々の行動になるのですね。


では、今度は次のようにinitialize()メソッドを編集してみてください。

--------------------------------------------------------
   private void initialize() {
      this.setSize(300, 200);
      this.setContentPane(getJContentPane());
      this.setTitle("2つの立方体をいっしょに回転");

      GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
      Canvas3D canvas = new Canvas3D(config);
      SimpleUniverse universe = new SimpleUniverse(canvas);
      BranchGroup group = new BranchGroup();
      TransformGroup transGroup1 = new TransformGroup();
      transGroup1.addChild(new ColorCube(0.1));
      Transform3D trans1 = new Transform3D();
      trans1.setTranslation(new Vector3d(-0.3, 0.0, 0.0));
      transGroup1.setTransform(trans1);

      TransformGroup transGroup2 = new TransformGroup();
      transGroup2.addChild(new ColorCube(0.2));

      TransformGroup transGroup3 = new TransformGroup();
      transGroup3.addChild(transGroup1);
      transGroup3.addChild(transGroup2);
      Transform3D trans3 = new Transform3D();
      trans3.setRotation(new AxisAngle4d(1.0, 1.0, 1.0, Math.PI / 4));
      transGroup3.setTransform(trans3);
      group.addChild(transGroup3);

      universe.getViewingPlatform().setNominalViewingTransform();
      group.compile();
      universe.addBranchGraph(group);
      getJContentPane().add(canvas);
   }

--------------------------------------------------------

編集したら、保管して実行してみましょう。

今度は、transGroup1の子の立方体とtransGroup2の子の立方体はともに
transGroup3というグループの中にまとめられており(つまりtransGroup1も
transGroup2もともにtransGroup3の子になっており)、そのtransGroup3に
回転の変換が設定されているので、2つの立方体はいっしょに回転すること
になります。



では、今日はここまでにします。

何か、わからないところがありましたら、下記のWebページまで質問を
お寄せください。



┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
★ホームページ:
      http://www.flsi.co.jp/Java_text/
★このメールマガジンは
     「まぐまぐ(http://www.mag2.com)」
 を利用して発行しています。
★バックナンバーは
      http://www.flsi.co.jp/Java_text/
 にあります。
★このメールマガジンの登録/解除は下記Webページでできます。
      http://www.mag2.com/m/0000193915.html
★このメールマガジンへの質問は下記Webページにて受け付けて
 います。わからない所がありましたら、どしどしと質問をお寄
 せください。
      http://www.flsi.co.jp/Java_text/
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

Copyright (C) 2008 Future Lifestyle Inc. 不許無断複製