首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否可以在JavaFX中实现透视图转换?

是否可以在JavaFX中实现透视图转换?
EN

Stack Overflow用户
提问于 2013-11-20 22:03:57
回答 1查看 1.2K关注 0票数 3

Affine类作为Transform类在JavaFX中的扩展。

这就产生了一种错觉,认为可以有一些类型的变换,而不是仿射。

更新

JavaFX 2.x中,Transform类只包含特定矩阵元素的获取器,其中包含12个用于三维仿射变换的3x4矩阵元素。任何类的使用都只能依赖于这些元素,因此任何表示的转换都是仿射的。

这意味着2.x版本的设计很糟糕,因为基类只能表示仿射转换,而Affine是它的子类。这是错误的,因为Affine应该是基本类。

JavaFX 8中,Transform类有较好的设计。除了getter之外,它还对对矩阵元素的访问和对矩阵型的确定进行了索引。另外,它还有transform()方法,它们可以进行实际的转换。

这意味着,使用既可以依赖transform()方法,也可以依赖于矩阵元素getter。

如果可以保证JavaFX的所有内部部分都依赖于transform()方法,则可以扩展该类并实现透视图转换。也许它甚至可以在JavaFX8的发布版本中实现。

问题是:能否保证JavaFX只依赖于transform()方法?

EN

回答 1

Stack Overflow用户

发布于 2013-11-21 09:10:46

是的,数学中有非仿射变换.

不,JavaFX 2.2变换类不支持这些非仿射转换,JavaFX 8变换类也不支持它们。在transform类或它的任何子类中,没有方法可以设置执行非仿射变换所需的变换矩阵元。

您可以将PerspectiveTransform应用于2D节点。有关使用示例,请参阅我对用Java将多边形拉伸到其他多边形的回答。

要理解非仿射变换的数学,请参阅佩托德的解释。您可以对二维变换使用类似的数学。是的,我知道Petzold的例子不是JavaFX的例子。但是,数学仍然有效,您可以通过一个JavaFX或使用自定义矩阵定义修改TriangleMesh中的点来将其应用于TriangleMesh

注意,PerspectiveTransform的一个限制是选择(鼠标选择)不起作用。对转换后的TriangleMesh来说,拾取是可行的,但是网格本身并不是一个普通的JavaFX节点,只是一个阴影面的集合。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20108005

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档