Ios 如何将精灵扭曲成梯形?
我正在尝试将精灵转换为梯形,我并不真正关心插值,即使我知道没有插值,我的图像将丢失细节。我真正想做的就是将我的矩形精灵转换成梯形,如下所示:Ios 如何将精灵扭曲成梯形?,ios,iphone,cocos2d-iphone,core-animation,calayer,Ios,Iphone,Cocos2d Iphone,Core Animation,Calayer,我正在尝试将精灵转换为梯形,我并不真正关心插值,即使我知道没有插值,我的图像将丢失细节。我真正想做的就是将我的矩形精灵转换成梯形,如下所示: 有人用CGAffineTransforms或cocos2d这样做过吗?您提出的转换不是仿射的。必须是可撤销的。因此,他们通常可以: 鳞片 轮换 剪切(使不平衡,如方形->平行四边形) 翻译 但它们不能“挤压”。请注意,梯形的左侧和右侧如果延伸,将在特定点相交。它们不再平行了。因此,您无法“撤消”转换,因为如果在该位置有任何要转换的内容,您无法决定它们
有人用CGAffineTransforms或cocos2d这样做过吗?您提出的转换不是仿射的。必须是可撤销的。因此,他们通常可以:
- 鳞片
- 轮换
- 剪切(使不平衡,如方形->平行四边形)
- 翻译
GL\u RECT
,并将你的精灵映射到它上作为纹理最简单的方法可能是在照片编辑器中预压缩图像,将其保存为带透明度的.png格式,然后用该图像绘制一个矩形。您需要将CATTransform3D应用于UIView的图层。 要找到正确的一个,它更容易使用
#导入
UIView*视图=…;//创建一个视图
view.layer.anchorPoint=CGPointZero;
AGKQuad=view.layer.quadrasive;
quad.tl.x+=20;//将左上角的x值移动20像素
quad.tr.x-=20;//将右上角的x值移动20个像素
view.layer.quadrilateral=四边形;//四元组转换为CATTransferM3D并应用
你好,凯文,非常感谢你的意见。这两个选项都很好,但是我忘了提到我希望我的精灵最初是一个规则的矩形,然后动态地将其转换为梯形。我不知道这是否可行。使用我描述的OpenGL方法是可行的。我想把它保存在照片编辑器里的方法是不可能的。你能不能干脆把它放在NSAffinetTransform里?我不认为你可以,如果你可以,你可以keystone…我真的不认为可逆本身是一个要求,只是一个副产品,大多数变换都会有一个逆矩阵。。。那些不需要除以零来求解inverse@GradyPlayer是的,你可以在仿射变换中剪切。我不认为有帮助函数可以创建这样的矩阵,但你可以做到。从单位矩阵开始,然后将m12或m21改为X乘Y或Y乘X。
/ \
/ \
/__________\
#import <AGGeometryKit/AGGeometryKit.h>
UIView *view = ...; // create a view
view.layer.anchorPoint = CGPointZero;
AGKQuad quad = view.layer.quadrilateral;
quad.tl.x += 20; // shift top left x-value with 20 pixels
quad.tr.x -= 20; // shift top right x-value with 20 pixels
view.layer.quadrilateral = quad; // the quad is converted to CATransform3D and applied