需要更好,更简单地理解CATransform3D

may*_*uur 20 calayer catransform3d caanimation ios

请仔细阅读图片.

初始位置 旋转后

所以这是我从一些在线资源获得的代码,它确实改变了我的对象.除此之外,我什么都不懂.我是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;
Run Code Online (Sandbox Code Playgroud)

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

我想了解但没有进一步.

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

非常感谢.

Fog*_*ter 33

我不确定什么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)

  • m34值是第三行,第四列,是实际给出旋转透视的变换后面的矩阵中的值. (3认同)

Dav*_*ist 9

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

您可以在Wikipedia上阅读有关矩阵乘法背后的数学的更多信息.

关于价值观CATransform3DRotate(...).

  • 第一个参数是您正在旋转的变换
  • 第二个是角度(以弧度表示),
  • 其他三个参数是你旋转的轴((x,y,z)向量).


Pau*_*lin 5

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

动画变换

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

拟合多边形

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

矩阵计算

感谢您提出这个问题,它帮助我开始了我的项目,因为我知道不仅我有这个问题!