我想将一些使用 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 中将照明仅应用于画布上特定区域的正确方法是什么?喜欢定义我的点光源的半径吗?