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

时间:2013-01-10 15:19:25

标签: ios calayer caanimation catransform3d

请浏览图片。

Initial Position After Rotation

所以这是我从一些在线资源获得的代码,它确实改变了我的对象。除此之外,我什么都不懂。我是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。请帮助处理任何文章,文档或解释自己。

非常感谢。

3 个答案:

答案 0 :(得分:33)

我不确定m34是什么,不看。

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

3D旋转不同。它需要一个角度,但它需要知道你在哪个轴(或多个轴)旋转。

CATransform3DRotate中,您可以给它五个参数......

  1. 要将轮换应用于的转换。
  2. 角度(以弧度表示)π弧度= 180度 3,4和5是应用于每个轴的角度旋转的多少。

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

  4. Y轴 - 这是从屏幕顶部到屏幕底部的轴。
  5. Z轴 - 这是直接指向屏幕的轴。
  6. 您在示例中应用的旋转如下...

    角度= 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)

答案 1 :(得分:9)

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

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

关于CATransform3DRotate(...)的值。

  • 第一个参数是您正在旋转的变换
  • 第二个是角度(弧度),
  • 另外三个参数是你旋转的轴((x,y,z)向量)。

答案 2 :(得分:4)

以下是Swift https://github.com/paulz/PerspectiveTransform中的项目,它有助于计算CATransform3D并包含示例应用和游乐场。

animated transformation

它可用于为CALayer转换属性设置动画。

fitted polygon

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

matrix calculation

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