Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios CATTransformM3dMakeRotation和CATTransformM3dRotate之间的差异_Ios_Swift - Fatal编程技术网

Ios CATTransformM3dMakeRotation和CATTransformM3dRotate之间的差异

Ios CATTransformM3dMakeRotation和CATTransformM3dRotate之间的差异,ios,swift,Ios,Swift,我在看和的官方文件,我不明白它们有什么区别。有人在哪里使用了CATTransformM3dMakeRotation和CATTransformM3dRotate?您可以使用4 x 4矩阵表示各种3D变换,包括平移、缩放、旋转、倾斜和透视 通过将表示每个变换的矩阵相乘,可以在单个矩阵中表示多个连续变换 CATTransferrM3dMakeRotation创建一个表示单个变换的矩阵:围绕给定轴旋转给定角度 CATTransformM3dRotate创建一个矩阵,就像CATTransformM3dMa

我在看和的官方文件,我不明白它们有什么区别。有人在哪里使用了
CATTransformM3dMakeRotation
CATTransformM3dRotate

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

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


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

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

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

您可以像这样使用
CATTransformM3dMakeRotation
编写
CATTransformM3dRotate

func CATransform3DRotate(_ t: CATransform3D, _ angle: CGFloat, _ x: CGFloat, _ y: CGFloat, _ z: CGFloat) -> CATransform3D {
    let rotation = CATransform3DMakeRotation(angle, x, y, z)
    return CATransform3DConcat(rotation, t)
}
func myCATransform3DMakeRotation(_ angle: CGFloat, _ x: CGFloat, _ y: CGFloat, _ z: CGFloat) -> CATransform3D {
    return CATransform3DRotate(CATransform3DIdentity, angle, x, y, z)
}
CATTransform3DCONCAT
返回两个矩阵的乘积

或者您可以使用
CATTransformM3dRotate
编写
CATTransformM3dRotate
如下:

func CATransform3DRotate(_ t: CATransform3D, _ angle: CGFloat, _ x: CGFloat, _ y: CGFloat, _ z: CGFloat) -> CATransform3D {
    let rotation = CATransform3DMakeRotation(angle, x, y, z)
    return CATransform3DConcat(rotation, t)
}
func myCATransform3DMakeRotation(_ angle: CGFloat, _ x: CGFloat, _ y: CGFloat, _ z: CGFloat) -> CATransform3D {
    return CATransform3DRotate(CATransform3DIdentity, angle, x, y, z)
}
CATTransferorM3DidEntity
是标识矩阵,不表示任何转换


如果您想了解有关变换矩阵的更多信息,如何构造和组合它们,以及为什么需要4x4矩阵进行三维变换,请在您喜爱的搜索引擎中键入。

CATTransferorM3dMakeRotation
创建新的变换

CATTransferM3dRotate
接受现有变换并旋转它

如果你只是试着旋转,其实没有什么不同。但是如果你需要缩放,然后旋转,然后平移,最后可能会有所不同