javaFX初探(灯光)

52 篇文章 0 订阅
47 篇文章 4 订阅

本章介绍javaFX 3D库的的Light API。

Light也是场景图中的一个节点,如果场景中灯光的集合是空的话,那么就会提供一个默认的灯光。每个灯光都包含一个节点的集合,如果集合没有包含节点,那么场景中所有的节点都会被灯光影响,如果集合中包含一个父节点,那么所有的子节点都会产生影响。

Light与3D图形和它的材料的几何图像相互作用就会产生渲染的结果,我们有两种类型的光源:

 AmbientLight :这个光源看起来好像来自各个方向

 PointLight :这是一个点光源,他会均匀的向各个方向辐射光。

下面是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.setTranslateZ(-75);

这个方法设置translateZ属性的值,这行带码设置的值是-75,这个值会被增加到任何ObservableList 和 layoutZ定义的节点中。

下面的代码是一个使用灯光的实例:

...
        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);
...

这段代码是取自 之前的MSAAApp.java中。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值