20

请浏览图片。

初始位置 旋转后

所以这是我从一些在线资源获得的代码,它确实改变了我的对象。除此之外,我什么都不懂。我是 CATransform3D 的新手,想知道它是如何工作的。

CATransform3D transform = CATransform3DIdentity;
transform.m34 = 1.0 / -500;
transform = CATransform3DRotate(transform, 45.0f * M_PI / 180.0f, 0, 1, 0.0f);
_bgView.layer.transform = transform;

我想知道这段代码是如何运行的?为什么我们要在 m34 中设置一些值?我发现它是某种矩阵,甚至让我更加困惑。另外, CATransform3DRotate中的参数是什么 意思???

我试图理解但没有进一步了解。

我想深入了解 CATransform3D。请帮助任何文章,文档或解释自己。

非常感谢。

4

3 回答 3

37

我不确定什么m34是不看。

2D 旋转很容易,因为它所需要的只是一个旋转角度。然后围绕 Z 轴(即直接指向屏幕外的轴)进行旋转。

3D 旋转是不同的。它需要一个角度,但也需要知道您围绕哪个轴(或多个轴)旋转。

CATransform3DRotate你给它五个参数......

  1. 要对其应用旋转的变换。
  2. 角度(以弧度为单位) π 弧度 = 180 度 3、4 和 5 是应用于每个轴的角度旋转量。

  3. X 轴 - 这是从屏幕左侧到屏幕右侧的轴。

  4. Y 轴 - 这是从屏幕顶部到屏幕底部的轴。
  5. Z 轴 - 这是直接从屏幕指向您的轴。

您在示例中应用的旋转如下...

角度 = 45 度(转换为弧度)。X = 0 Y = 1 Z = 0

这意味着所有 45 度都将围绕 Y 轴旋转。即它会像旋转门一样绕着中间的线旋转。

如果你有参数......最后是“1,0,0”,那么它会像桨船桨一样旋转。“离你而去。”

最后,如果你有“0, 0, 1”,它会像屏幕上的凯瑟琳轮一样旋转。

您还可以组合这些值,即具有“0、1、1”以应用围绕两个轴的旋转。

矩阵的 w 行是透视投影。你有没有在学校做过透视图,你放置一个点并从点画线,然后画出适合这些线的东西来给它透视?那么 m34 值决定了该点的位置,因此提供了透视。将其设置为 -50 之类的值,您会看到更大的差异。

设置 m34 与该点的 Z 轴值有关。所以该点位于 (0, 0, -1/500)

于 2013-01-10T15:49:35.327 回答
9

m34值是第三行第四列,是实际给出旋转透视图的变换后面的矩阵中的值。

您可以在 Wikipedia 上阅读更多关于矩阵乘法背后的数学知识。

关于 的值CATransform3DRotate(...)

  • 第一个参数是您正在旋转的变换
  • 第二个是角度(以弧度为单位),
  • 其他三个参数是您正在旋转的轴((x,y,z)向量)。
于 2013-01-10T15:55:49.383 回答
5

这是我在 Swift https://github.com/paulz/PerspectiveTransform中的项目,它有助于计算 CATransform3D 并包括示例应用程序和游乐场。

动画变换

它可用于动画 CALayer 变换属性。

拟合多边形

有关构造矩阵和其他可能解决方案的详细信息,请参见 wiki:https ://github.com/paulz/PerspectiveTransform/wiki。

矩阵计算

谢谢你的这个问题,它帮助我开始我的项目,不仅知道我有这个问题!

于 2018-03-13T07:48:37.220 回答