我正在尝试将Sprite转换为梯形,即使我知道没有插值,我的图像也会丢失细节,我并不十分在意插值。我真正想要做的就是将矩形Sprite转换成梯形,如下所示:

  /      \
 /        \
/__________\

有没有人用CGAffineTransforms或cocos2d做到这一点?

最佳答案

您要提出的转换并非仿射。 Affine transformations必须是不可撤消的。因此,他们通常可以:

  • 旋转
  • 剪切(使偏斜,像正方形->平行四边形)
  • 翻译

  • 但是他们不能“挤压”。请注意,梯形的左侧和右侧(如果延伸)将在特定位置相交。他们不再平行了。因此,您无法“撤消”转换,因为如果在该位置有任何要转换的内容,则无法确定它们将转换到的位置。换句话说,如果转换不保留并行性,它将挤压空间,无法撤消并且不仿射。

    我对Core Animation的转换了解不多,所以我希望数学方面的东西能帮助您找到替代方案。

    但是我确实知道如何在OpenGL中完成此操作,但这需要您重新开始如何绘制应用程序:
  • 如果我正在正确设想您想要的结果,则要在3D中构建矩形,使用仿射变换将其稍微旋转一下,然后使用(非仿射)投影变换将其展平为2D图像。
  • 如果您不是要寻找3D效果,而是只想捏住角落,则可以指定带有梯形点的GL_RECT,然后将精灵作为纹理映射到它上。

  • 最简单的方法可能是在照片编辑器中预压缩图像,将其另存为具有透明性的.png,然后使用该图像绘制一个矩形。

    关于ios - 如何将Sprite扭曲成梯形?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2095824/

    10-13 01:18