【问题标题】:How do I arbitrarily distort a textured polygon?如何任意扭曲带纹理的多边形?
【发布时间】:2010-02-19 09:42:30
【问题描述】:

我想编写一个程序,让我可以通过拖动顶点来任意扭曲带纹理的多边形。假设新多边形不与自身相交,我希望纹理流畅地扭曲且不重叠。我还应该能够以新形状重复该过程,并且损失最少。

是否有任何算法可以做到这一点?

【问题讨论】:

  • 这适用于实时应用程序还是较慢的技术也适用?对多边形中的点数有任何限制吗?能保证凸吗?
  • 较慢的技术也可以。点数没有限制,虽然不会高得离谱。凹多边形是允许和预期的。
  • 另外,它不必是实际的纹理。它可能只是多边形内的许多连接点,尽管总体思路是相同的。

标签: graphics geometry polygon textures texture-mapping


【解决方案1】:

听起来您可能想要Schwarz-Christoffel mapping 的变体。这是一种保形映射,可用于将多边形扭曲到更简单的区域(如圆盘)或从更简单的区域扭曲;虽然我没有实现它,但显然它在计算上是易于处理的。

对于您的应用程序,您将设置从原始多边形到更简单区域的映射,并计算到修改多边形的逆映射;将两者结合起来应该可以为您提供从原始多边形到修改后多边形的良好保形映射。

保形映射很好而且很平滑,但它们有时会表现得不直观;我可以想象动画版本可能会产生一些有趣的“滑动”效果。保形映射将保留多边形内部的局部角度;这意味着非常接近修改的顶点的尺寸失真可能很严重。

【讨论】:

    【解决方案2】:

    在过去的一两年里,人们一直在研究这个问题的解决方案,并且最先进的技术不断变得越来越好(但数学也变得越来越难)。工作http://www.cs.technion.ac.il/~weber/Publications/Complex-Coordinates/

    是一个很好的起点(也是我停止关注它的地方)

    阅读那里的论文,并在参考文献中查找论文。其中一个应该给你一个你愿意实现的算法。

    【讨论】:

      【解决方案3】:

      我能想到的最简单的方法是对输入多边形进行三角测量(使用剪耳法或类似的方法),然后移动这些点。然后您可以使用从原始多边形到新空间的重心映射。

      如果您正在寻找更稳健的东西,您可能会查看平均值坐标。

      【讨论】:

        猜你喜欢
        • 2012-06-06
        • 1970-01-01
        • 1970-01-01
        • 2012-12-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多