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

标签 java swing javafx javafx-8 codenameone

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

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

我知道我可能可以将透视应用于整个 Canvas ,但我只想将其应用于我正在绘制的几个元素(类似于 Java2D 中应用仿射变换的方式)。

最佳答案

PerspectiveTransform只能应用于整个 Canvas ,而不能应用于 Canvas 内的元素.

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

Canvas 允许您set an affine transform它将应用于 Canvas 的后续绘图指令,但透视变换是非仿射变换,因此这对您没有帮助。

一些替代选项(可能适合您的情况,也可能不适合您的情况):

  1. 将多个 Canvas 元素叠加在一起,并对每个层应用不同的透视变换效果(这有点不方便)。 Oracle提供canvas layering sample .
  2. 应用 math for the perspective transform在将它们实际发送到 Canvas 之前,在要在 Canvas 中绘制的每个坐标上。
  3. 使用 true 3D surface and co-ordinates JavaFX 将负责为您执行正确的透视变换计算,而不是 PerspectiveTransform 提供的人造 3D。如有必要,可以将 3D 表面放置在 SubScene 中。分层在 Canvas 或其他节点之上。

如果您有兴趣从 AWT/Swing 移植代码 Graphics2D到 JavaFX GraphicsContext ,以下问题可能有用:Interoperability between Graphics2D and GraphicsContext .

关于java - 是否可以将 JavaFX 的 PerspectiveTransform 与新的 Canvas 类一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24606350/

相关文章:

JavaFX 网络支持(TCP、UDP、SSH)?

java - 为什么我的 JavaFX 应用程序的拖动例程在 JavaFX 8 中中断?

java - 是否可以在用 java 构建的 Android 应用程序中运行 AIR 播放器 (OSMF)?

java - 在 Java Applet 中实现数字签名

Java SWING 无法正确绘制

java - 使用 javapanel 的元素

java - 正在发送短信 : User 10074 does not have android. 权限.SEND_SMS

java - Maven 配置文件在 Intellij IDEA 12 中被忽略

java - 通过从 Jframe 类 3 中的 jtable 中选择项目来更改 JFrame class1、JFrame class2...中的文本字段的值

java - 如何禁用 TableView 中选定的行