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-2にMSAAApp.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); ...