オブジェクト指向言語論 第十三回 知能情報学部 新田直也 Java3D(1) Java用の3次元グラフィックスライブラリ http://java.sun.com/javase/technologies/desktop/java3d/ SUNが開発 既存の3次元グラフィックスAPI(OpenGLまたは DirectX)の上で動作 比較的容易に使える Java3D (2) 3次元物体を木構造で管理する(シーングラフ) Character Head BodyBody UpperArmR ArmR LowerArmR … Head ArmR ArmL UpperArmL ArmL UpperArmR UpperArmRLowerArmL LowerArmR LowerArmR UpperLegL UpperLegR LegR LowerLegR LowerLegL LegL Java3Dの主要クラス SimpleUniverse: 描画対象となる3Dの世界全体 BranchGroup: シーングラフの根 (SimpleUniverseの下にぶら下げる) TransformGroup: 回転・移動行列 (シーングラフ内に配置する) Box: 直方体 Sphere: 球 Cylinder: 円柱 Cone: 円錐 SimpleUniverseの作成 Canvas3Dを引数に持つコンストラクタで生成: GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration(); Canvas3D canvas = new Canvas3D(config); SimpleUniverse universe = new SimpleUniverse(canvas); シーングラフの構築 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); Java3Dの座標系 モニターに対して手前方向がZ軸の正の方向 Y モニター X Z サンプルプログラム Frame3D: Java3Dの画像を表示できるようにし たウィンドウ(JFrameを拡張) Main: メインクラス、Frame3Dを生成して表示する サンプルプログラムの主要部分 GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration(); Canvas3D canvas = new Canvas3D(config); SimpleUniverse universe = new SimpleUniverse(canvas); BranchGroup sceneGraph = new BranchGroup(); SimpleUniverseの作成 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); 描画の準備 図形の移動 TransformGroupを使って,下位の図形を移動: Transform3D moveTranslation = new Transform3D(); Vector3d v = new Vector3d(2.0, 0.0, -5.0); // 移動ベクトル moveTranslation.set(v); objTrans.setTransform(moveTranslation); 図形の回転 TransformGroupを使って,下位の図形を回転: Transform3D rotTranslation = new Transform3D(); rotTranslation.rotY(Math.PI / 4); // Y軸周りに回転 objTrans.setTransform(rotTranslation); 図形の拡大縮小 TransformGroupを使って,下位の図形を拡縮: Transform3D scaleTranslation = new Transform3D(); Vector3d v = new Vector3d(2.0, 1.0, 0.5); // 拡縮ベクトル scaleTranslation.setScale(v); objTrans.setTransform(scaleTranslation); 参考になるサイト Java3D入門: http://www7.plala.or.jp/keny01/java3d/index.html Java3Dで3次元アプリ: http://www.javadrive.jp/java3d/
© Copyright 2024 ExpyDoc