import javafx.scene.Group; import javafx.scene.effect.PerspectiveTransformBuilder; import javafx.scene.layout.VBox; import javafx.scene.paint.Color; import javafx.scene.shape.Rectangle; import javafx.scene.text.Font; import javafx.scene.text.FontWeight; import javafx.scene.text.Text; public class PerspectiveTransformDemo extends ExtendedApplicationX { @Override protected void setup() { VBox vBox = new VBox(); vBox.setSpacing(15); Group g1 = getNode(); g1.setEffect(PerspectiveTransformBuilder.create().ulx(10.0).uly(10.0) .urx(310.0).ury(40.0).lrx(310.0).lry(60.0).llx(10.0).lly(90.0) .build());// Left to right Group g2 = getNode(); g2.setEffect(PerspectiveTransformBuilder.create().ulx(30.0).uly(60.0) .urx(290.0).ury(60.0).lrx(310.0).lry(90.0).llx(10.0).lly(90.0) .build());// Front to Back Group g3 = getNode(); g3.setEffect(PerspectiveTransformBuilder.create().ulx(310.0).uly(40.0) .urx(10.0).ury(10.0).lrx(10.0).lry(90.0).llx(310.0).lly(60.0) .build());// Reverse Right to Left Group g4 = getNode(); g4.setEffect(PerspectiveTransformBuilder.create().ulx(10.0).uly(40.0) .urx(310.0).ury(10.0).lrx(310.0).lry(90.0).llx(10.0).lly(60.0) .build());// Right to Left vBox.getChildren().addAll(g1, g2, g3, g4); root.setContent(vBox); } private Group getNode() { Group g = new Group(); g.setCache(true); Rectangle r = new Rectangle(); r.setX(10.0); r.setY(10.0); r.setWidth(280.0); r.setHeight(80.0); r.setFill(Color.BLUE); Text t = new Text(); t.setX(20.0); t.setY(65.0); t.setText("Perspective"); t.setFill(Color.YELLOW); t.setFont(Font.font(null, FontWeight.BOLD, 36)); g.getChildren().add(r); g.getChildren().add(t); return g; } public static void main(String[] args) { ExtendedApplicationX.launch(args); } }