■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 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. 不許無断複製 |