IOS 三维图像处理(九)--CATransform3D
2016-04-07 10:04
417 查看
转自:http://blog.sina.com.cn/s/blog_51a995b70101mz3q.html
structCATransform3D
{CGFloatm11(x缩放), m12(y切变), m13(旋转), m14;
CGFloatm21(x切变), m22(y缩放), m23, m24;
CGFloatm31(旋转), m32, m33, m34(透视效果,要操作的对象要有旋转的角度,不然没效果);
CGFloatm41(x平移), m42(y平移), m43(z平移), m44;};
m34透视效果,一般通过-1.0/d来应用透视效果,d代表想象中视觉相机与屏幕之间的距离,以像素为单位,通常500-1000j就已经很好了。
注:使用3D变换的时候要注意灭点,统一设置所有图层共享一个灭点
CATransform3D perspective = CATransform3DIdentity;
perspective.m34 = - 1.0 / 500.0;
self.containerView.layer.sublayerTransform = perspective;
CATransform3DMakeTranslation (CGFloat tx, CGFloat ty, CGFloattz)
tx:X轴偏移位置,往下为正数。
ty:Y轴偏移位置,往右为正数。
tz:Z轴偏移位置,往外为正数。
CATransform3DMakeScale(CGFloat sx, CGFloat sy, CGFloat sz);
sx:X轴缩放,代表一个缩放比例,一般都是0 --- 1 之间的数字。
sy:Y轴缩放。
sz:整体比例变换时,也就是m11(sx)==m22(sy)时,若m33(sz)>1,图形整体缩小,若0<1,图形整体放大,若m33(sz)<0,发生关于原点的对称等比变换。
CATransform3DMakeRotation(CGFloat angle, CGFloat x, CGFloat y, CGFloat z);
angle:旋转的弧度,所以要把角度转换成弧度:角度* M_PI / 180。
x:向X轴方向旋转。值范围-1--- 1之间
y:向Y轴方向旋转。值范围-1 ---1之间
z:向Z轴方向旋转。值范围-1 ---1之间
CATransform3DContact 把动作combine在一起
文/lucifrom_(简书作者)
原文链接:http://www.jianshu.com/p/44080eec7a1c
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
换换函数:
CATransform3D CATransform3DMakeTranslation (CGFloat
tx, CGFloat ty, CGFloat tz)
tx:X轴偏移位置,往下为正数。
ty:Y轴偏移位置,往右为正数。
tz:Z轴偏移位置,往外为正数。
例:
如果有2个图层,一个是绿色的,一个是红色的。先加载绿色,后加载红色。
tx,ty的左右偏移先不说了。
如果绿色的tz为-10 ,红色的tz为 0 效果如下。
![](http://my.csdn.net/uploads/201204/12/1334193488_5379.png)
如果绿色的tz为 0 ,红色的tz为-10 效果如下。
![](http://my.csdn.net/uploads/201204/12/1334193493_3796.png)
对于tz来说,值越大,那么图层就越往外(接近屏幕),值越小,图层越往里(屏幕里)。
CATransform3D CATransform3DTranslate (CATransform3D t, CGFloat tx, CGFloat ty, CGFloat tz);
t:就是上一个函数。其他的都一样。
就可以理解为:函数的叠加,效果的叠加。
CATransform3D CATransform3DMakeScale (CGFloat sx, CGFloat
sy, CGFloat sz);
sx:X轴缩放,代表一个缩放比例,一般都是 0 --- 1 之间的数字。
sy:Y轴缩放。
sz:整体比例变换时,也就是m11(sx)== m22(sy)时,若m33(sz)>1,图形整体缩小,若0<1,图形整体放大,若m33(sz)<0,发生关于原点的对称等比变换。
当sx = 1,sy = 1时。如图:
![](http://my.csdn.net/uploads/201204/12/1334202947_8749.png)
当sx = 0.5,sy = 0.5时。如图:
![](http://my.csdn.net/uploads/201204/12/1334203009_7408.png)
CATransform3D CATransform3DScale (CATransform3D t, CGFloat
sx, CGFloat sy, CGFloat sz)
t:就是上一个函数。其他的都一样。
就可以理解为:函数的叠加,效果的叠加。
CATransform3D CATransform3DMakeRotation (CGFloat angle,
CGFloat x, CGFloat y, CGFloat z);
旋转效果。
angle:旋转的弧度,所以要把角度转换成弧度:角度 * M_PI / 180。
x:向X轴方向旋转。值范围-1 --- 1之间
y:向Y轴方向旋转。值范围-1 --- 1之间
z:向Z轴方向旋转。值范围-1 --- 1之间
例:向X轴旋转60度。 向Y轴旋转60度。 向Z轴旋转60度。
![](http://my.csdn.net/uploads/201204/12/1334208076_1359.png)
![](http://my.csdn.net/uploads/201204/12/1334208076_1359.png)
![](http://my.csdn.net/uploads/201204/12/1334208197_4641.png)
向 X轴,Y轴都旋转60度,就是沿着对角线旋转。
![](http://my.csdn.net/uploads/201204/12/1334208592_1285.png)
可以通过X,Y,Z轴同时变化,来旋转图像。
CATransform3D CATransform3DRotate (CATransform3D t, CGFloat angle, CGFloat x, CGFloat y, CGFloat z);
t:就是上一个函数。其他的都一样。
就可以理解为:函数的叠加,效果的叠加。
CATransform3D CATransform3DInvert (CATransform3D t);
翻转效果。
未使用 使用
![](http://my.csdn.net/uploads/201204/12/1334210214_1027.png)
![](http://my.csdn.net/uploads/201204/12/1334210219_6168.png)
CGAffineTransform CATransform3DGetAffineTransform (CATransform3D t);
bool CATransform3DIsAffine (CATransform3D t);
仿射效果。
就是把一个 CATransform3D 对象转换成一个 CGAffineTransform 对象。
也就是把 CATransform3D 矩阵 转换成 CGAffineTransform 矩阵
变换函数同时提供了可以比较一个变换矩阵是否是单位矩阵,或者两个矩阵是否相等。
bool CATransform3DIsIdentity (CATransform3D
t);
bool CATransform3DEqualToTransform
(CATransform3D a, CATransform3D b);
也可以通过修改数据结构和键值来设置变换效果。
或者修改键值
structCATransform3D
{CGFloatm11(x缩放), m12(y切变), m13(旋转), m14;
CGFloatm21(x切变), m22(y缩放), m23, m24;
CGFloatm31(旋转), m32, m33, m34(透视效果,要操作的对象要有旋转的角度,不然没效果);
CGFloatm41(x平移), m42(y平移), m43(z平移), m44;};
m34透视效果,一般通过-1.0/d来应用透视效果,d代表想象中视觉相机与屏幕之间的距离,以像素为单位,通常500-1000j就已经很好了。
注:使用3D变换的时候要注意灭点,统一设置所有图层共享一个灭点
CATransform3D perspective = CATransform3DIdentity;
perspective.m34 = - 1.0 / 500.0;
self.containerView.layer.sublayerTransform = perspective;
CATransform3DMakeTranslation (CGFloat tx, CGFloat ty, CGFloattz)
tx:X轴偏移位置,往下为正数。
ty:Y轴偏移位置,往右为正数。
tz:Z轴偏移位置,往外为正数。
CATransform3DMakeScale(CGFloat sx, CGFloat sy, CGFloat sz);
sx:X轴缩放,代表一个缩放比例,一般都是0 --- 1 之间的数字。
sy:Y轴缩放。
sz:整体比例变换时,也就是m11(sx)==m22(sy)时,若m33(sz)>1,图形整体缩小,若0<1,图形整体放大,若m33(sz)<0,发生关于原点的对称等比变换。
CATransform3DMakeRotation(CGFloat angle, CGFloat x, CGFloat y, CGFloat z);
angle:旋转的弧度,所以要把角度转换成弧度:角度* M_PI / 180。
x:向X轴方向旋转。值范围-1--- 1之间
y:向Y轴方向旋转。值范围-1 ---1之间
z:向Z轴方向旋转。值范围-1 ---1之间
CATransform3DContact 把动作combine在一起
文/lucifrom_(简书作者)
原文链接:http://www.jianshu.com/p/44080eec7a1c
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
换换函数:
CATransform3D CATransform3DMakeTranslation (CGFloat
tx, CGFloat ty, CGFloat tz)
tx:X轴偏移位置,往下为正数。
ty:Y轴偏移位置,往右为正数。
tz:Z轴偏移位置,往外为正数。
例:
如果有2个图层,一个是绿色的,一个是红色的。先加载绿色,后加载红色。
tx,ty的左右偏移先不说了。
如果绿色的tz为-10 ,红色的tz为 0 效果如下。
![](http://my.csdn.net/uploads/201204/12/1334193488_5379.png)
如果绿色的tz为 0 ,红色的tz为-10 效果如下。
![](http://my.csdn.net/uploads/201204/12/1334193493_3796.png)
对于tz来说,值越大,那么图层就越往外(接近屏幕),值越小,图层越往里(屏幕里)。
CATransform3D CATransform3DTranslate (CATransform3D t, CGFloat tx, CGFloat ty, CGFloat tz);
t:就是上一个函数。其他的都一样。
就可以理解为:函数的叠加,效果的叠加。
CATransform3D CATransform3DMakeScale (CGFloat sx, CGFloat
sy, CGFloat sz);
sx:X轴缩放,代表一个缩放比例,一般都是 0 --- 1 之间的数字。
sy:Y轴缩放。
sz:整体比例变换时,也就是m11(sx)== m22(sy)时,若m33(sz)>1,图形整体缩小,若0<1,图形整体放大,若m33(sz)<0,发生关于原点的对称等比变换。
当sx = 1,sy = 1时。如图:
![](http://my.csdn.net/uploads/201204/12/1334202947_8749.png)
当sx = 0.5,sy = 0.5时。如图:
![](http://my.csdn.net/uploads/201204/12/1334203009_7408.png)
CATransform3D CATransform3DScale (CATransform3D t, CGFloat
sx, CGFloat sy, CGFloat sz)
t:就是上一个函数。其他的都一样。
就可以理解为:函数的叠加,效果的叠加。
CATransform3D CATransform3DMakeRotation (CGFloat angle,
CGFloat x, CGFloat y, CGFloat z);
旋转效果。
angle:旋转的弧度,所以要把角度转换成弧度:角度 * M_PI / 180。
x:向X轴方向旋转。值范围-1 --- 1之间
y:向Y轴方向旋转。值范围-1 --- 1之间
z:向Z轴方向旋转。值范围-1 --- 1之间
例:向X轴旋转60度。 向Y轴旋转60度。 向Z轴旋转60度。
![](http://my.csdn.net/uploads/201204/12/1334208076_1359.png)
![](http://my.csdn.net/uploads/201204/12/1334208076_1359.png)
![](http://my.csdn.net/uploads/201204/12/1334208197_4641.png)
向 X轴,Y轴都旋转60度,就是沿着对角线旋转。
![](http://my.csdn.net/uploads/201204/12/1334208592_1285.png)
可以通过X,Y,Z轴同时变化,来旋转图像。
CATransform3D CATransform3DRotate (CATransform3D t, CGFloat angle, CGFloat x, CGFloat y, CGFloat z);
t:就是上一个函数。其他的都一样。
就可以理解为:函数的叠加,效果的叠加。
CATransform3D CATransform3DInvert (CATransform3D t);
翻转效果。
未使用 使用
![](http://my.csdn.net/uploads/201204/12/1334210214_1027.png)
![](http://my.csdn.net/uploads/201204/12/1334210219_6168.png)
CGAffineTransform CATransform3DGetAffineTransform (CATransform3D t);
bool CATransform3DIsAffine (CATransform3D t);
仿射效果。
就是把一个 CATransform3D 对象转换成一个 CGAffineTransform 对象。
也就是把 CATransform3D 矩阵 转换成 CGAffineTransform 矩阵
变换函数同时提供了可以比较一个变换矩阵是否是单位矩阵,或者两个矩阵是否相等。
bool CATransform3DIsIdentity (CATransform3D
t);
bool CATransform3DEqualToTransform
(CATransform3D a, CATransform3D b);
也可以通过修改数据结构和键值来设置变换效果。
struct CATransform3D {
CGFloat m11, m12, m13, m14;
CGFloat m21, m22, m23, m24;
CGFloat m31, m32, m33, m34;
CGFloat m41, m42, m43, m44; } 可以直接修改 其中的一个值,来达到相同的效果。
或者修改键值
[myLayer setValue:[NSNumber numberWithInt:0] forKeyPath:@"transform.rotation.x"];
![](http://my.csdn.net/uploads/201204/12/1334211496_7014.png)
相关文章推荐
- iOS 字体转换
- iOS开发学习之 - 正则表达式在IOS中的应用
- ios学习之plist文件的读写以及存储位置的探究
- iOS动画开发之五——炫酷的粒子效果
- iOS中的加密:MD5
- iOS 中copy的简单理解
- iOS开发常用小技巧记录(持续更新)
- iOS 常识
- iOS中定时器NSTimer的开启与关闭
- iOS中关于NSTimer使用知多少
- ios开发中图片命名规范
- iOS Block
- iOS中造成dealloc不调用的原因
- iOS之简单瀑布流的实现
- 给NIOS II CPU增加看门狗定时器并使用
- iOS 检测版本更新
- ios 基于CAEmitterLayer的雪花,烟花,火焰,爱心等效果demo
- iOS 抓包总结
- iOS KVC 键值编码
- iOS 存储数据