Как вы наносите на карту большие площади в холсте JavaFX? - PullRequest
1 голос
/ 22 сентября 2019

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

enter image description here

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 применять освещение только к определенной области на моем холсте?Как определить радиус моего точечного источника света?

...