ドキュメント



JavaFX: JavaFXグラフィックスの操作

5 ライト

この章では、JavaFX 3Dグラフィックス・ライブラリに含まれるLight APIについて説明します。

ライトもシーン・グラフでノードとして定義されるようになりました。シーンに含まれるアクティブなライトのセットが空の場合は、デフォルトのライトが提供されます。各ライトには、影響を受けるノードのセットが含まれています。ノードのセットが空の場合は、シーン(またはサブシーン)のすべてのノードが影響を受けます。そのノードのセット内に親ノードがある場合は、そのすべての子も影響を受けます。

ライトは、Shape3Dオブジェクトのジオメトリおよびそのマテリアルと対話して、レンダリング結果を生成します。現在は、次の2つのタイプの光源があります。

  • AmbientLight - すべての方向から発生しているように見える光源。

  • PointLight - 空間内に固定点を持ち、それ自体からすべての方向に均等にライトを放射する光源。

例5-1に、Lightのクラス階層を示します。

例5-1 Lightのクラス階層

javafx.scene.Node
   javafx.scene.LightBase (abstract)
      javafx.scene.AmbientLight
      javafx.scene.PointLight

ライトの作成および使用

ポイント・ライトを作成してシーンに追加するには、次を実行します。

PointLight light = new PointLight();
    light.setColor(Color.RED);
    

次を使用して、ライトをシーン・グラフに追加します。

Group lightGroup = new Group();
    lightGroup.getChildren().add(light);
    root.getChildren().add(lightGroup);

次のコード行を使用して、ライトを45度回転させます。

light.rotate(45);

lightGroupを移動し、それとともにライトを移動させるには、次のようなコードを使用します。

lightGroup.setTranslateZ(-75);

setTranslateZ()メソッドによってプロパティtranslateZの値が設定され、前述のサンプル・コードでは-75に設定されます。この値は、変換ObservableListおよびlayoutZによって定義される平行移動に追加されます。

例5-2MSAAApp.javaアプリケーションのコード・スニペットを示し、PointLight APIの使用方法を示します。

例5-2 PointLight APIを使用するMSAAApp.javaのコード・スニペット

...
        PointLight light = new PointLight(Color.WHITE);
        light.setTranslateX(50);
        light.setTranslateY(-300);
        light.setTranslateZ(-400);
        PointLight light2 = new PointLight(Color.color(0.6, 0.3, 0.4));
        light2.setTranslateX(400);
        light2.setTranslateY(0);
        light2.setTranslateZ(-400);
 
        AmbientLight ambientLight = new AmbientLight(Color.color(0.2, 0.2, 0.2));
        node.setRotationAxis(new Point3D(2, 1, 0).normalize());
        node.setTranslateX(180);
        node.setTranslateY(180);
        root.getChildren().addAll(setTitle(title), ambientLight, 
                                  light, light2, node);
...
ウィンドウを閉じる

目次

JavaFX: JavaFXグラフィックスの操作

展開 | 縮小