public PerspectiveTransform build() { double w = cell.prefWidth(50); double h = cell.prefHeight(50); double viewDistance = getWidth() * getSkinnable().getViewDistanceRatio() + getWidth() * getSkinnable().getRadiusRatio(); double fov = getSkinnable().getFieldOfViewRatio() * getSkinnable().getWidth(); double cw = w / 2; double ch = h / 2; Point2D ul2d = project(ul, viewDistance, fov, cw, ch); Point2D ur2d = project(ur, viewDistance, fov, cw, ch); Point2D ll2d = project(ll, viewDistance, fov, cw, ch); Point2D lr2d = project(lr, viewDistance, fov, cw, ch); perspectiveTransform = new PerspectiveTransform( ul2d.getX(), ul2d.getY(), ur2d.getX(), ur2d.getY(), lr2d.getX(), lr2d.getY(), ll2d.getX(), ll2d.getY()); if (reflection != null) { ulReflection2d = project(ulReflection, viewDistance, fov, cw, ch); urReflection2d = project(urReflection, viewDistance, fov, cw, ch); perspectiveTransform.setInput(reflection); } return perspectiveTransform; }