2014-04-28 152 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的六个参数,必须对每个三角形的三个角进行光线追踪。 (如果你不熟悉“射线追踪”,它比听起来容易得多,你只需要指定点映射到哪里以及它映射到哪里)。然后用一些基本的数学方法求解仿射变换参数。