首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CATransform3DMakeRotation与CATransform3DRotate的区别

CATransform3DMakeRotation与CATransform3DRotate的区别
EN

Stack Overflow用户
提问于 2017-03-23 17:33:09
回答 2查看 1.1K关注 0票数 3

我看了CATransform3DMakeRotationCATransform3DRotate的正式文档,我不明白它们有什么区别。在哪里有人使用CATransform3DMakeRotation,在哪里使用CATransform3DRotate

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-23 17:48:02

您可以使用一个4×4矩阵来表示各种各样的3D转换,包括平移、缩放、旋转、倾斜和透视。

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

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

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

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

您可以使用这样的CATransform3DRotate使用CATransform3DMakeRotation编写CATransform3DMakeRotation

代码语言:javascript
复制
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

代码语言:javascript
复制
func myCATransform3DMakeRotation(_ angle: CGFloat, _ x: CGFloat, _ y: CGFloat, _ z: CGFloat) -> CATransform3D {
    return CATransform3DRotate(CATransform3DIdentity, angle, x, y, z)
}

CATransform3DIdentity是恒等矩阵,根本不表示转换。

如果您想了解更多关于转换矩阵的知识,如何构造和组合它们,以及为什么您需要一个用于3D转换的4x4矩阵,请在您最喜欢的搜索引擎中键入homogeneous coordinates 3d

票数 7
EN

Stack Overflow用户

发布于 2017-03-23 17:49:33

CATransform3DMakeRotation创建了一个新的转换。

CATransform3DRotate接受一个现有的转换并旋转它。

如果你只是想旋转,那就没有什么不同了。但是,如果你需要缩放,然后旋转,然后平移,可能会有一个不同的结尾。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42983093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档