簡體   English   中英

是否可以在JavaFX中實現透視變換?

[英]Is it possible to implement perspective transform in JavaFX?

Affine類在JavaFX作為擴展Transform類而制作。

這是一種幻覺,除了仿射之外,還有一些類型的變換。

UPDATE

JavaFX 2.x Transform類僅包含特定矩陣元素的getter,其中包括用於3D仿射變換的12x3x4矩陣元素。 任何類使用都只能依賴於這些元素,因此任何表示的轉換都是仿射的。

這意味着2.x版本的設計很糟糕,因為基本類只能代表仿射變換,而Affine則是它的子類。 這是錯誤的,因為Affine應該成為基礎課。

JavaFX 8 Transform類有更好的設計。 除了吸氣劑之外,它還具有對矩陣元素的索引訪問和矩陣類型的確定。 它還有transform()方法,它們進行實際轉換。

這意味着,該用法可以依賴於transform()方法,也可以依賴於矩陣元素getter。

如果可以保證, JavaFX所有內部部分都依賴於transform()方法,那么可以擴展此類並實現透視轉換。 甚至可以在JavaFX8發布版本中JavaFX8

問題是:可以保證, JavaFX僅依賴於transform()方法嗎?

是的,數學中存在非仿射變換。

不, JavaFX 2.2 Transform類不支持這些非仿射變換, JavaFX 8 Transform類也不支持這些非仿射變換。 在Transform類或其任何子類中無法設置執行非仿射變換所需的變換矩陣元素。

您可以將PerspectiveTransform應用於2D節點。 有關用法示例,請參閱我使用Java將多邊形拉伸到其他多邊形的答案。

要了解非仿射變換的數學,請參閱Petzold的解釋 您可以使用類似的數學進行2D變換 是的,我意識到Petzold的例子不是JavaFX的例子。 但是,數學仍然成立,您可以通過PerspectiveTransform或使用自定義矩陣定義修改TriangleMesh中的點,將其應用於JavaFX。

注意,PerspectiveTransform的一個限制是拾取(鼠標選擇)不起作用。 拾取將適用於已轉換的TriangleMesh,但網格本身不是一般的JavaFX節點,只是一組陰影面。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM