-
3D变换的矩阵
3D变换其实就是加了一个维度。
对应的,旋转、平移、缩放也增加了维度。
CATransform3DMakeRotation(CGFloat angle, CGFloat x, CGFloat y, CGFloat z)
CATransform3DMakeScale(CGFloat sx, CGFloat sy, CGFloat sz)
CATransform3DMakeTranslation(Gloat tx, CGFloat ty, CGFloat tz)
- 透视投影
由于屏幕是2维的,要展示3维的效果,必须借助于投影。
CATransform3D
的透视效果通过一个矩阵中一个很简单的元素来控制:m34
。m34
用于按比例缩放X和Y的值来计算到底要离视角多远。
一般设置为-1/d
,d
为500-1000的值就好。 - 灭点
3D投影时,所有视线的交点叫做灭点。
一般来说,屏幕上所有物体的灭点应该是一个点,因为一个屏幕是一个整体。灭点对应于anchorpoint
,所以要先把所有的layer的anchorpoint
设为屏幕中心,然后平移变换到指定位置,然后再做3D变换。而不能直接设置position,也就是anchorpoint,也就是灭点。所有的3D图层都应该共享一个灭点。 -
sublayerTransform
如果要一个屏幕有多个图层,为了达到统一的灭点和投影效果,需要分别设置每个layer的变换,很繁琐。还好有sublayerTransform
属性,可以一次性设置所有子layer的变换,然后子layer可以在这个变换基础上做变换。而且还有一个额外的好处。
灭点被设置在容器图层的中点,从而不需要再对子图层分别设置了。这意味着你可以随意使用position和frame来放置子图层,而不需要把它们放置在屏幕中点,然后为了保证统一的灭点用变换来做平移。
- 2