关于CATransform3D矩阵变换的简单解析

简介:

关于CATransform3D矩阵变换的简单解析

效果图:

 

我能能够用上的CATransform3D其实很简单,并不复杂.

CATransform3D有着4种东西我们可以设置.

 

1. 透视效果(由m34的值决定)

2. 位移变换(主要是x,y方向)

3. 缩放变换

4. 空间旋转

 

源码:

//
//  RootViewController.m
//
//  Copyright (c) 2014年 Y.X. All rights reserved.
//

#import "RootViewController.h"
#import "CATransform3DOperation.h"
#import "YXGCD.h"

@interface RootViewController ()

@property (nonatomic, strong) GCDTimer *timer;

@end

// 将角度转换为弧度
#define DEGREES_TO_RADIANS(d)  ((d) * M_PI / 180.f)

@implementation RootViewController


- (void)viewDidLoad
{
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor blackColor];
    
    // 给Layer一个图片内容
    UIImage *image = [UIImage imageNamed:@"4"];
    CALayer *layer = [CALayer layer];
    layer.frame = CGRectMake(0, 0, image.size.width, image.size.height);
    layer.position = self.view.center;
    layer.borderWidth = 4.f;
    layer.borderColor = [UIColor redColor].CGColor;
    layer.contents = (__bridge id)image.CGImage;
    [self.view.layer addSublayer:layer];
    
    // 6s后执行操作
    [[GCDQueue mainQueue] execute:^{
        
        // 初始化3D变换,获取默认值
        CATransform3D perspectiveTransform = CATransform3DIdentity;
        
        // 透视
        perspectiveTransform.m34 = -1.0/500.0;
        
        // 位移
        perspectiveTransform = CATransform3DTranslate(perspectiveTransform, 30, -35, 0);
        
        // 空间旋转
        perspectiveTransform = CATransform3DRotate(perspectiveTransform,
                                                   DEGREES_TO_RADIANS(30), .75, 1, -0.5);
        
        // 缩放变换
        perspectiveTransform = CATransform3DScale(perspectiveTransform, 0.75, 0.75, 0.75);
        
        layer.transform = perspectiveTransform;
        layer.speed = 0.5;
        
    } afterDelay:NSEC_PER_SEC * 6];

    // 9s后执行操作
    [[GCDQueue mainQueue] execute:^{
        
        // 初始化3D变换,获取默认值
        CATransform3D perspectiveTransform = CATransform3DIdentity;
        
        layer.transform = perspectiveTransform;
        layer.speed = 0.5;
        
    } afterDelay:NSEC_PER_SEC * 9];
}


@end

核心代码:

 

 

http://stackoverflow.com/questions/3881446/meaning-of-m34-of-catransform3d

目录
相关文章
|
11天前
【ShaderToy中图形效果转译到UnityShaderlab案例分享,实现圆形图像变异_Animation】
【ShaderToy中图形效果转译到UnityShaderlab案例分享,实现圆形图像变异_Animation】
|
1月前
|
计算机视觉
OpenCV(三十三):计算轮廓面积与轮廓长度
OpenCV(三十三):计算轮廓面积与轮廓长度
55 0
|
1月前
|
计算机视觉
OpenCV(三十四):轮廓外接最大、最小矩形和多边形拟合
OpenCV(三十四):轮廓外接最大、最小矩形和多边形拟合
81 0
|
2月前
|
监控 API 计算机视觉
OpenCV这么简单为啥不学——1.4、基础标识绘制(绘制线line函数、rectangle函数绘制四边形、circle函数绘制圆形、putText函数绘制文字、putText绘制中文文字)
OpenCV这么简单为啥不学——1.4、基础标识绘制(绘制线line函数、rectangle函数绘制四边形、circle函数绘制圆形、putText函数绘制文字、putText绘制中文文字)
28 0
|
前端开发 数据可视化 图形学
【数学篇】09 # 如何用仿射变换对几何图形进行坐标变换?
【数学篇】09 # 如何用仿射变换对几何图形进行坐标变换?
114 0
【数学篇】09 # 如何用仿射变换对几何图形进行坐标变换?
|
图形学
Unity【Lerp & Slerp】- 线性插值与球形插值的区别
Unity【Lerp & Slerp】- 线性插值与球形插值的区别
416 1
Unity【Lerp & Slerp】- 线性插值与球形插值的区别
|
存储 缓存 Serverless
六、OpenGL 渲染技巧:深度测试、多边形偏移、 混合
OpenGL 渲染技巧:深度测试、多边形偏移、 混合
260 0
六、OpenGL 渲染技巧:深度测试、多边形偏移、 混合
|
Windows
【OpenGL】二十、OpenGL 矩阵变换 ( 矩阵缩放变换 | 矩阵旋转变换 | 矩阵平移变换 )(二)
【OpenGL】二十、OpenGL 矩阵变换 ( 矩阵缩放变换 | 矩阵旋转变换 | 矩阵平移变换 )(二)
118 0
【OpenGL】二十、OpenGL 矩阵变换 ( 矩阵缩放变换 | 矩阵旋转变换 | 矩阵平移变换 )(二)
【OpenGL】二十、OpenGL 矩阵变换 ( 矩阵缩放变换 | 矩阵旋转变换 | 矩阵平移变换 )(一)
【OpenGL】二十、OpenGL 矩阵变换 ( 矩阵缩放变换 | 矩阵旋转变换 | 矩阵平移变换 )(一)
123 0
【OpenGL】二十、OpenGL 矩阵变换 ( 矩阵缩放变换 | 矩阵旋转变换 | 矩阵平移变换 )(一)
Halcon示例之求一个矩形四个角点坐标的八种方法
Halcon示例之求一个矩形四个角点坐标的八种方法
1389 0
Halcon示例之求一个矩形四个角点坐标的八种方法