Presentation is loading. Please wait.

Presentation is loading. Please wait.

プログラミング言語論 第十四回 理工学部 情報システム工学科 新田直也.

Similar presentations


Presentation on theme: "プログラミング言語論 第十四回 理工学部 情報システム工学科 新田直也."— Presentation transcript:

1 プログラミング言語論 第十四回 理工学部 情報システム工学科 新田直也

2 Java3D(1) Java用の3次元グラフィックスライブラリ SUNが開発 既存の3次元グラフィックスAPI(OpenGLまたはDirectX)の上で動作 比較的容易に使える

3 Java3D (2) 3次元物体を木構造で管理する(シーングラフ) … Head UpperArmL LowerArmL UpperLegL
LowerLegL UpperLegR LowerLegR LowerArmR UpperArmR ArmL LegL Body ArmR LegR Character Head Body ArmR ArmL UpperArmR LowerArmR

4 Java3Dの主要クラス SimpleUniverse: 描画対象となる3Dの世界全体
BranchGroup: シーングラフの根(SimpleUniverseの下にぶら下げる) TransformGroup: 回転・移動行列 (シーングラフ内に配置する) Box: 直方体 Sphere: 球 Cylinder: 円柱 Cone: 円錐

5 SimpleUniverseの作成 Canvas3Dを引数に持つコンストラクタで生成:
GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration(); Canvas3D canvas = new Canvas3D(config); SimpleUniverse universe = new SimpleUniverse(canvas);

6 シーングラフの構築 BranchGroupの下にぶら下げる: 木構造の構築
SimpleUniverse universe = new SimpleUniverse(canvas); BranchGroup sceneGraph = new BranchGroup(); TransformGroup objTrans = new TransformGroup(); objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); Box box = new Box(); objTrans.addChild(box); sceneGraph.addChild(objTrans); universe.addBranchGraph(sceneGraph); 木構造の構築

7 Java3Dの座標系 モニターに対して手前方向がZ軸の正の方向 Y モニター X Z

8 サンプルプログラム Frame3D: Java3Dの画像を表示できるようにしたウィンドウ(JFrameを拡張)
Main: メインクラス、Frame3Dを生成して表示する

9 サンプルプログラムの主要部分 SimpleUniverseの作成
GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration(); Canvas3D canvas = new Canvas3D(config); SimpleUniverse universe = new SimpleUniverse(canvas); BranchGroup sceneGraph = new BranchGroup(); DirectionalLight light = new DirectionalLight( true,  new Color3f(1.0f, 1.0f, 1.0f), new Vector3f(0.0f, -0.5f, -1.0f)); light.setInfluencingBounds(new BoundingSphere(new Point3d(), 100.0)); TransformGroup objTrans = new TransformGroup(); objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); Cone cone = new Cone(0.4f, 0.6f); sceneGraph.addChild(objTrans); sceneGraph.addChild(light); objTrans.addChild(cone); universe.addBranchGraph(sceneGraph); universe.getViewingPlatform().setNominalViewingTransform(); Container contentPane = getContentPane(); contentPane.setLayout(new BorderLayout()); contentPane.add(canvas, BorderLayout.CENTER); setBounds( 10, 10, 240, 240); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); SimpleUniverseの作成

10 図形の移動 TransformGroupを使って,下位の図形を移動:
Transform3D moveTranslation = new Transform3D(); Vector3d v = new Vector3d(2.0, 0.0, -5.0); // 移動ベクトル moveTranslation.set(v); objTrans.setTransform(moveTranslation);

11 図形の回転 TransformGroupを使って,下位の図形を回転:
Transform3D rotTranslation = new Transform3D(); rotTranslation.rotY(Math.PI / 4); // Y軸周りに回転 objTrans.setTransform(rotTranslation);

12 図形の拡大縮小 TransformGroupを使って,下位の図形を拡縮:
Transform3D scaleTranslation = new Transform3D(); Vector3d v = new Vector3d(2.0, 1.0, 0.5); // 拡縮ベクトル scaleTranslation.setScale(v); objTrans.setTransform(scaleTranslation);

13 参考になるサイト Java3D入門: http://www7.plala.or.jp/keny01/java3d/index.html


Download ppt "プログラミング言語論 第十四回 理工学部 情報システム工学科 新田直也."

Similar presentations


Ads by Google