CATransform3DMakeRotation和CATransform3DRotate之间的区别

时间:2017-03-23 17:33:10

标签: ios swift

我正在查看CATransform3DMakeRotationCATransform3DRotate的官方文档,我无法理解它们的区别。有人使用try{ myArrayList.add(input.nextInt()); }catch(InputMismatchException e){ } catch(NoSuchElementException e1){ } catch(IllegalStateException e2){ } CATransform3DMakeRotation哪里?

2 个答案:

答案 0 :(得分:5)

您可以使用4 x 4矩阵表示各种3D变换,包括平移,缩放,旋转,倾斜和透视。

通过将表示每个单独变换的矩阵相乘,您可以在单个矩阵中表示多个连续变换。

CATransform3DMakeRotation创建一个表示单个变换的矩阵:围绕给定轴旋转给定角度。

CATransform3DRotate创建一个像CATransform3DMakeRotation那样的矩阵,然后将该矩阵乘以另一个矩阵,从而将旋转添加到现有的变换序列中。

所以你真的只需要一个或另一个。如果你有一个,你可以很容易地定义另一个。

您可以使用CATransform3DRotate这样写CATransform3DMakeRotation

func CATransform3DRotate(_ t: CATransform3D, _ angle: CGFloat, _ x: CGFloat, _ y: CGFloat, _ z: CGFloat) -> CATransform3D {
    let rotation = CATransform3DMakeRotation(angle, x, y, z)
    return CATransform3DConcat(rotation, t)
}

CATransform3DConcat返回两个矩阵的乘积。

或者您可以使用CATransform3DMakeRotation这样写CATransform3DRotate

func myCATransform3DMakeRotation(_ angle: CGFloat, _ x: CGFloat, _ y: CGFloat, _ z: CGFloat) -> CATransform3D {
    return CATransform3DRotate(CATransform3DIdentity, angle, x, y, z)
}

CATransform3DIdentity是单位矩阵,根本不表示转换。

如果您想了解有关转换矩阵的更多信息,如何构建和组合转换矩阵,以及为什么需要4x4矩阵进行3D转换,请在您最喜爱的搜索引擎中输入homogeneous coordinates 3d

答案 1 :(得分:2)

CATransform3DMakeRotation创建了一个新的转换。

CATransform3DRotate获取现有变换并旋转它。

如果你只想尝试旋转,那真的不一样。但是如果你需要缩放,然后旋转,然后翻译,那么最后可能会有所不同。