1

我想将一些使用 JavaFX 的灯光效果应用到画布上GraphicsContext。起初,我使用Lighting.bumpInput传递静态凹凸贴图进行照明。然而,这只照亮了我画布的某个区域。
所以现在我手动进行照明,首先将所有凹凸贴图绘制到画布上,然后应用我的照明效果,最后将所有原始图像与BlendMode.MULTIPLY光照凹凸贴图混合在一起。这看起来不像第一种方法那么好,但它确实完成了它的工作。现在仍然存在照明效果(Pointlight)应用在整个画布上的问题,无论面积有多大。

在此处输入图像描述

public void start(Stage primaryStage) {
   Image texture = new Image("...");
   Image bumpMap = new Image("...");

   Light.Point pointLight = new Light.Point(256, 256, 25, Color.WHITE);
   Lighting lighting = new Lighting(pointLight);

   Canvas canvas = new Canvas(1280, 800);
   canvas.getGraphicsContext().setGlobalBlendMode(BlendMode.MULTIPLY);
   canvas.getGraphicsContext().drawImage(bumpMap, 0, 0);
   canvas.getGraphicsContext().applyEffect(lighting);
   canvas.getGraphicsContext().drawImage(texture, 0, 0);

   Scene scene = new Scene(new AnchorPane(canvas), 1280, 800);
   primaryStage.setScene(scene);
   primaryStage.show();
}

现在我的问题是,JavaFX 中将照明仅应用于画布上特定区域的正确方法是什么?喜欢定义我的点光源的半径吗?

4

0 回答 0