是否可以将JavaFX的PerspectiveTransform与新的Canvas类一起使用?

时间:2014-07-07 08:40:42

标签: java swing javafx javafx-8 codenameone

我们有很多依赖于绘图的图形语义的Swing代码,因此迁移到JavaFX的层次结构不是一个选项(重写为本机代码/ OpenGL会更简单)。我们希望得到PerspectiveTransform的支持,而新的Canvas类看起来很有趣。

是否可以将PerspectiveTransform效果与Canvas类一起使用并将其应用于其中的元素?

我知道我可以将透视应用于整个画布,但是我想将它应用于我正在绘制的一些元素(类似于在Java2D中应用仿射变换的方式)。

1 个答案:

答案 0 :(得分:1)

PerspectiveTransform只能作为整体应用于画布,而不能应用于Canvas内的元素。

PerspectiveTransform效果适用于节点。虽然画布本身是一个节点,但绘制到画布本身的指令不是节点。

画布允许您set an affine transform将其应用于画布的后续绘图说明,但透视变换是非仿射变换,因此对您没有帮助。

一些备选方案(可能适用于您的情况也可能不适用):

  1. 将多个画布元素叠加在一起,将不同的透视变换效果应用于每个图层(这是一种不方便的事情)。 Oracle提供canvas layering sample
  2. 在将实际发送到画布之前,在要在画布上绘制的每个坐标上应用math for the perspective transform
  3. 使用true 3D surface and co-ordinates代替PerspectiveTransform提供的虚拟3D,然后JavaFX将负责为您执行正确的透视变换计算。如有必要,可以将3D表面放置在画布或其他节点顶部的SubScene层中。
  4. 如果您对将代码从AWT / Swing Graphics2D移植到JavaFX GraphicsContext感兴趣,以下问题可能会有用:Interoperability between Graphics2D and GraphicsContext