如何随意扭曲纹理多边形?

时间:2010-02-19 09:42:30

标签: graphics geometry polygon textures texture-mapping

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

有没有算法可以做到这一点?

3 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

在过去的十年或二十年里,人们一直致力于解决这个问题,而且现状仍然越来越好(但数学也越来越难)。工作http://www.cs.technion.ac.il/~weber/Publications/Complex-Coordinates/

是一个好的起点(以及我停止跟踪的地方)

在那里阅读论文,并在参考文献中查阅论文。其中一个应该为您提供一个您愿意实施的算法。

答案 2 :(得分:0)

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

如果您正在寻找更强大的东西,您可以查看平均值坐标。