■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 2008年09月21日 楽しいJava講座 - 初心者から達人へのパスポート vol.121 セルゲイ・ランダウ バックナンバー: http://www.flsi.co.jp/Java_text/ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ [このメールマガジンは、画面を最大化して見てください。] ======================================================== ◆ 01.3Dグラフィックスのアプリケーション開発 ======================================================== さて、これまでの宇宙(SimpleUniverse)は真っ暗なものでしたが、 この背景を少し明るいものにしたい人もいるかも知れません。 あるいは、日常生活の場を描いた3Dアプリケーションなどを作る場合 は、何らかの背景の絵(風景画など)を表示しておくのが普通です。 このために、Java 3Dでは、背景を表現するクラスとして、Background というクラスが用意されています。 今回は、このBackgroundを使って、背景を真っ暗ではなく少し明るく してみましょう。 そのためには、たとえば次のようにBackgroundクラスを使用します。 まず背景の色を作成しておきます。たとえば、下記のように作成して おきましょう。 Color3f backColor = new Color3f(0.2f, 0.2f, 0.2f); 続いて、Backgroundのインスタンスを生成しましょう。 Background background = new Background(backColor); 例によって、Backgroundにもそれが働く領域(範囲)を設定する必要が ありますので、たとえば次のように領域の設定を行います。 BoundingSphere bound = new BoundingSphere(new Point3d(0.0,0.0,0.0), 10.0); background.setApplicationBounds(bound); そしてBackgroundをgroupの子として追加しておきます。 group.addChild(background); では、これらを踏まえて、下記のようにinitialize()メソッドを書き換えて みてください。 -------------------------------------------------------- private void initialize() { this.setSize(300, 300); 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.02)); Transform3D trans = new Transform3D(); trans.setTranslation(new Vector3d(0.7, 0.0, 0.0)); transGroup.setTransform(trans); TransformGroup rotationTransGrp = new TransformGroup(); rotationTransGrp.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); Alpha alpha = new Alpha(-1, 5000); Transform3D axisLean = new Transform3D(); axisLean.setRotation(new AxisAngle4d(1.0, 0.0, 0.0, Math.PI / 3)); rotationTransGrp.setTransform(axisLean); RotationInterpolator rotator = new RotationInterpolator( alpha, rotationTransGrp, axisLean, 0.0f, (float) Math.PI * 2.0f); BoundingSphere rotationBounds = new BoundingSphere(new Point3d(0.0,0.0,0.0), 1.0); rotator.setSchedulingBounds(rotationBounds); rotationTransGrp.addChild(transGroup); rotationTransGrp.addChild(rotator); group.addChild(rotationTransGrp); BranchGroup group2 = new BranchGroup(); Color3f darkColor = new Color3f(0.0f, 0.0f, 0.0f); Color3f ambiColor = new Color3f(0.0f, 0.1f, 0.0f); // 弱い色にすること! Color3f diffuColor = new Color3f(0.0f, 0.6f, 0.0f); Material mat = new Material(ambiColor, darkColor, diffuColor, darkColor, 0.0f); Appearance appear = new Appearance(); appear.setMaterial(mat); Sphere sphere = new Sphere(0.5f, Sphere.GENERATE_NORMALS, 100, appear); group2.addChild(sphere); Color3f color = new Color3f(1.5f, 1.5f, 0.0f); BoundingSphere bounds = new BoundingSphere(new Point3d(0.0,0.0,0.0), 1.0); Vector3f lightDirection = new Vector3f(-1.0f, -1.0f, -1.0f); DirectionalLight light = new DirectionalLight(color, lightDirection); light.setInfluencingBounds(bounds); group2.addChild(light); AmbientLight ambiLight = new AmbientLight(color); ambiLight.setInfluencingBounds(bounds); group2.addChild(ambiLight); group.addChild(group2); Color3f backColor = new Color3f(0.2f, 0.2f, 0.2f); Background background = new Background(backColor); BoundingSphere bound = new BoundingSphere(new Point3d(0.0,0.0,0.0), 10.0); background.setApplicationBounds(bound); group.addChild(background); universe.getViewingPlatform().setNominalViewingTransform(); universe.getViewer().getView().setMinimumFrameCycleTime(5); OrbitBehavior behavior = new OrbitBehavior(canvas, OrbitBehavior.REVERSE_ALL); BoundingSphere behavBounds = new BoundingSphere(new Point3d(0.0, 0.0, 0.0), 1.0); behavior.setSchedulingBounds(behavBounds); universe.getViewingPlatform().setViewPlatformBehavior(behavior); group.compile(); universe.addBranchGraph(group); getJContentPane().add(canvas); } -------------------------------------------------------- 編集が終わったら、保管して実行してみてください。 背景が真っ暗ではなく、少し明るくなりましたね。 でも、これじゃ、あまり宇宙らしくありませんね。 (次回に続く) では、今日はここまでにします。 何か、わからないところがありましたら、下記の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. 不許無断複製 |