Я хочу применить некоторые световые эффекты с помощью JavaFX к холсту GraphicsContext
.Сначала я использовал Lighting.bumpInput
, чтобы передать статическую карту освещения для освещения.Однако это только правильно освещает определенную область моего холста.
Так что теперь я делаю освещение вручную, сначала рисуя все рельефные карты на холсте, затем применяя свой эффект освещения и, наконец, смешивая все исходные изображения с BlendMode.MULTIPLY
вместе сосвещенные карты рельефа.Это выглядит не так хорошо, как первый, но делает свою работу.Теперь все еще существует проблема, заключающаяся в том, что эффект освещения (точечный свет) применяется ко всему холсту независимо от того, насколько велика область.
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 применять освещение только к определенной области на моем холсте?Как определить радиус моего точечного источника света?