美文网首页
第7章 变换

第7章 变换

作者: cdd48b9d36e0 | 来源:发表于2018-09-08 22:28 被阅读13次

7.1 仿射变换

UIView的transform属性是一个CGAffineTransform类型,用于在二维空间做旋转,缩放和平移。CGAffineTransform的本质是一个可以和二维空间向量(例如CGPoint)做乘法的3X2的矩阵。


检查是不是仿射变换,只需要看图层中任意两条平行线在变换之后还是不是平行,仍然平行就是仿射变换

UIView可以通过设置transform属性做变换,但实际上它只是封装了内部图层的变换。CALayer同样也有一个transform属性,但它的类型是CATransform3D,而不是CGAffineTransform,CALayer对应于UIView的transform属性叫做affineTransform

7.2 3D变换

和2x3的矩阵不同,CATransform3D是一个可以在3维空间内做变换的4x4的矩阵


透视投影

上面的3D变换在屏幕上看起来并不明显,这是因为我们视角到屏幕的距离一直是平行且不变的,而在现实中3D变换的时候物体的距离离我们视角的距离是会发生改变的,所以看起很明显。为了达到这种效果,我们需要引入投影变换(又称作z变换),也就是改变CATransform3D的m34(见上图,m34用于按比例缩放X和Y的值来计算到底要离视角多远),m34的默认值是0,我们可以通过设置m34为-1.0 / d来应用透视效果,d代表了想象中视角相机和屏幕之间的距离,以像素为单位,通常500-1000就够了

sublayerTransform属性

通过设置父图层的sublayerTransform,可以很方便的确保所有子图层的m34一致以及子图层的灭点都在容器图层的中点

背面

这并不是一个很好的特性,因为这有可能造成资源的浪费:既然永远都看不见这些图层的背面,那为什么浪费GPU来绘制它们呢?
CALayer有一个叫做doubleSided的属性来控制图层的背面是否要被绘制。这是一个BOOL类型,默认为YES,如果设置为NO,那么当图层正面从相机视角消失的时候,它将不会被绘制

扁平化图层

父图层会对子图层进行扁平化处理,意思就是说无论父图层做了什么变换,子图层一开始总是扁平化的

有一个例外,CATransformLayer不会扁平化图层(在专用图层章节有介绍)

7.3 固体对象(这一节的内容惊艳到我了)

本节创建了一个正方体,并有光亮和阴影效果(不过我跑起来没有该效果),以及某一面的点击事件

相关文章

  • OpenGL-18-变换与矩阵堆栈

    一、变换 1、OpenGL中的变换 2、视图变换 视图变换是应⽤到场景中的第⼀种变换, 它⽤来确定场景中的有利位置...

  • OpenGL的基础变换与矩阵堆栈

    基础变换 视图变换 视图变换是应⽤到场景中的第⼀种变换,通过物体/观察者在Z轴上的移动,从而确定场景中的有利位置;...

  • OpenGL中的变换

    理解在OpenGL ⾥的变化 一. 视图变换 视图变换是应⽤到场景中的第⼀种变换, 它用来确定场景中的有利位置,在...

  • 11 MRI图像分析--连续离散傅里叶变换

    前言 连续傅里叶变换和离散傅里叶变换经常用于MRI 图像分析之中,第11块主要讲MRI 图像和傅里叶变换的细节,涉...

  • 第7章 变换

    7.1 仿射变换 UIView的transform属性是一个CGAffineTransform类型,用于在二维空间...

  • 夏至

    2019年的夏至不约而至了。 其实,第年每季都不太知道季节的变化,“城里不知季节变换,不知季节已变换。家乡寄来包裹...

  • Homography|单应性

    几何变换类型 保距变换 isometry 相似变换 similarity 仿射变换 affine 射影变换 pro...

  • 复变函数与积分变换 第二版课后答案 (苏变萍)

    复变函数与积分变换 第二版课后答案 (苏变萍) 第1-2章 第3-5章

  • 彩色电影

    在森林中 树叶变换色彩 昆虫变换翅膀 鸟变换羽毛 都像是 人在换衣裳 在河流中 鱼变换影子 水草变换舞步 河岸变换...

  • 数字图像处理-二

    变换域处理方法 一、主成分分析二、最小噪声分离三、缨帽变换线性变换 四、傅里叶变换五、小波变换频率域变换 六、颜色...

网友评论

      本文标题:第7章 变换

      本文链接:https://www.haomeiwen.com/subject/ilolgftx.html