2014-04-28 195 views
1

我一直在尋找如何變形定期形狀不規則形狀的網。到目前爲止,我只找到關於使事物遵循彎曲路徑或類似的資源。將矩形圖像變形爲不規則形狀

我期待做一個完整的形狀轉換。高效地將常規矩形變成不規則形狀。我的理想目標是將其用於簡單的2D布料模擬動畫。 Shapes

網絡上是否有任何現有的資源,我沒有設法找到?或者你們中的任何人都知道我將如何創建一種算法來處理這種變形。

我最初的猜測是讓我的形狀逐軸逐軸變形,但我擔心這可能會導致很多失真。有任何想法嗎?

+0

我想我可能已經找到了如何做類似於我希望使用AfflineTransform和shear()實現的事情。但它仍然不會達到全面的效果。 http://docs.oracle.com/javase/7/docs/api/java/awt/geom/AffineTransform.html –

+0

你應該指出你是否真的想將它應用於*圖像* - 特別是,你在談論一個'BufferedImage'嗎?這與布料模擬有多大關係?對於這樣的模擬,你通常需要3D座標,否則距離(邊緣長度)很難理解(在2D中,你只能合理地模擬*繩索 - 也就是1D對象)。無論如何:AffineTransforms(即使是3D)的問題在於它們......好,* affine *。他們不提供任意轉換。關於背景和意圖的更多信息可能對此有所幫助 – Marco13

+1

當然,基本上這一點。 http://puu.sh/8r7bz.PNG除了所有的直線都是直線,而不是小曲線。這將用於我的遊戲角色的布衣服。是的,這將是一系列BufferedImages。編輯:理論上仿射變換在這個應用中是最現實的,因爲材料不會被拉伸。 –

回答

0

是的,您可以通過將圖像分成矩形(然後將每個矩形分成兩個三角形)然後使用graphics.drawImage(..)AffineTransform設置爲圖形(這是每個三角形的不同變換)來完成此操作。

我在這個小程序做了它:http://nik-sergeev.com/trees.html

(如果您通過點擊有關拿出時下Java小應用程序的各種警告),那麼你會看到當你點擊該小程序中的頁面或書籤是一種「翻頁」效果,如上所述完成。 (這是一本應該看起來像書本的小程序。)

任何本地仿射的映射都可以通過這種方式實現。 (這是你永遠關心的大部分。)

要找到定義每個三角形的AffineTransform的六個參數,必須對每個三角形的三個角進行光線追蹤。 (如果你不熟悉「射線追蹤」,它比聽起來容易得多,你只需要指定點映射到哪裏以及它映射到哪裏)。然後用一些基本的數學方法求解仿射變換參數。