我在看CATransform3DMakeRotation的官方文档和 CATransform3DRotate我不明白他们有什么区别。有人在哪里使用 CATransform3DMakeRotation 以及在哪里使用 CATransform3DRotate?
最佳答案
您可以使用 4 x 4 矩阵表示各种 3D 变换,包括平移、缩放、旋转、倾斜和透视。
您可以通过将表示每个单独变换的矩阵相乘来在单个矩阵中表示多个连续的变换。
CATransform3DMakeRotation 创建一个表示单个变换的矩阵:围绕给定轴旋转给定角度。
CATransform3DRotate 像 CATransform3DMakeRotation 一样创建一个矩阵,然后将该矩阵乘以另一个矩阵,从而将旋转添加到现有的转换序列中。
所以你真的只需要一个或另一个。如果您有一个,则可以轻松定义另一个。
您可以使用 CATransform3DMakeRotation 编写 CATransform3DRotate,如下所示:
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 返回两个矩阵的乘积。
或者您可以使用 CATransform3DRotate 编写 CATransform3DMakeRotation,如下所示:
func myCATransform3DMakeRotation(_ angle: CGFloat, _ x: CGFloat, _ y: CGFloat, _ z: CGFloat) -> CATransform3D {
return CATransform3DRotate(CATransform3DIdentity, angle, x, y, z)
}
CATransform3DIdentity 是单位矩阵,表示根本没有转换。
如果您想了解更多关于变换矩阵、如何构建和组合它们以及为什么需要 4x4 矩阵进行 3D 变换,请输入 homogeneous coordinates 3d进入您最喜爱的搜索引擎。
关于ios - CATransform3DMakeRotation 和 CATransform3DRotate 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42983093/