我正在查看CATransform3DMakeRotation和CATransform3DRotate的官方文档,我无法理解它们的区别.有人在哪里使用CATransform3DMakeRotation和在哪里CATransform3DRotate?
您可以使用4 x 4矩阵表示各种3D变换,包括平移,缩放,旋转,倾斜和透视.
您可以通过将表示每个单独变换的矩阵相乘来在单个矩阵中表示多个连续变换.
CATransform3DMakeRotation 创建一个表示单个变换的矩阵:围绕给定轴旋转给定角度.
CATransform3DRotate像do那样创建一个矩阵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)
}
Run Code Online (Sandbox Code Playgroud)
CATransform3DConcat 返回两个矩阵的乘积.
或者,你可以写CATransform3DMakeRotation使用CATransform3DRotate这样的:
func myCATransform3DMakeRotation(_ angle: CGFloat, _ x: CGFloat, _ y: CGFloat, _ z: CGFloat) -> CATransform3D {
return CATransform3DRotate(CATransform3DIdentity, angle, x, y, z)
}
Run Code Online (Sandbox Code Playgroud)
CATransform3DIdentity 是单位矩阵,根本不代表任何变换.
如果您想了解有关转换矩阵的更多信息,如何构建和组合它们,以及为什么需要4x4矩阵进行3D转换,请输入homogeneous coordinates 3d您喜欢的搜索引擎.
| 归档时间: |
|
| 查看次数: |
619 次 |
| 最近记录: |