为什么围绕x轴平移CALayer会影响围绕Y轴的旋转

2杯技术

我添加了CALayer并按以下方式进行了转换。我认为旋转之前通过任何常数平移该层都不会影响绕Y轴的旋转,但似乎有所不同,我在这里缺少什么?

- (void)viewDidAppear:(BOOL)animated
{
    CALayer* layer = [CALayer layer];
    layer.bounds = self.img1.bounds;
    layer.backgroundColor = [[UIColor grayColor] CGColor];
    layer.anchorPoint = CGPointMake(0, 0.5);
    layer.position = CGPointMake(0, CGRectGetMidY(self.view.bounds));
    layer.contents = (id)[self.img1.image CGImage];
    layer.transform = [self transformforView1];
    [self.view.layer addSublayer:layer];
}

没有任何平移和输出的旋转:

- (CATransform3D)transformforView1
{
    CATransform3D t = CATransform3DIdentity;
    t.m34 = 1.0/-700;
    t = CATransform3DTranslate(t, 0, 0, 0);
    t = CATransform3DRotate(t, degToRad(45), 0, 1, 0);
    return t;
}

旋转无任何平移和输出

旋转500和输出相同的旋转:

- (CATransform3D)transformforView1
{
    CATransform3D t = CATransform3DIdentity;
    t.m34 = 1.0/-700;
    t = CATransform3DTranslate(t, 500, 0, 0);
    t = CATransform3DRotate(t, degToRad(45), 0, 1, 0);
    return t;
}

旋转500和输出时相同的旋转

七宝

这实际上是一个很好的问题。造成混淆的原因是,模型视图矩阵和投影矩阵通常是分开的。

阅读此问题以供参考:

模型视图投影矩阵的目的

我建议您将“模型视图矩阵”和“投影矩阵”分开。

因此,您的CATransform3D t实际上是两个矩阵的串联,您可以添加另一个转换以在视图中移动模型,或者创建另一个变换(您的模型视图矩阵)。这是我在这里所做的:

CATransform3D modelViewTransform = CATransform3DMakeTranslation([UIScreen mainScreen].bounds.size.height / 2.0, 0, 0);
CATransform3D t = CATransform3DIdentity;
t.m34 = 1.0/-700;
t = CATransform3DTranslate(t, 500, 0, 0);
t = CATransform3DRotate(t, degToRad(45), 0, 1, 0);
return CATransform3DConcat(t, modelViewTransform);

这会将模型移动到屏幕的中心,而不是移动到屏幕的边缘。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

了解WebGL中围绕任意轴旋转背后的数学运算

来自分类Dev

如何围绕3D轴(Y)旋转2D UIElement?

来自分类Dev

jQuery围绕xy轴旋转矩形

来自分类Dev

围绕对象轴THREE.js旋转对象

来自分类Dev

使用Matrix4f围绕多个轴旋转盒子

来自分类Dev

Android的“游戏旋转矢量”传感器会忽略围绕垂直轴的旋转吗?

来自分类Dev

我可以使用swift在iOS中围绕y轴旋转对象,但是如何围绕单个轴旋转许多对象?

来自分类Dev

围绕另一个点和X轴旋转点

来自分类Dev

围绕X轴上的圆进行3D变换

来自分类Dev

JavaFX的 - 围绕特定的X和Y旋转画布

来自分类Dev

统一-围绕Y轴旋转对象,同时不断向地面设置不同的旋转

来自分类Dev

使用四元数围绕轴旋转多个点

来自分类Dev

ggplot2输出图像围绕x轴标签居中

来自分类Dev

在间隔[0,π/ 4]上,由y = cos(x),x轴和y轴的图限制的固体体积围绕x轴旋转

来自分类Dev

在循环中围绕自己的轴旋转每个元素(处理)

来自分类Dev

为什么围绕原点旋转点会失去与原点的距离?

来自分类Dev

为什么围绕原点旋转点会失去与原点的距离?

来自分类Dev

围绕其自身的轴旋转3D图元

来自分类Dev

围绕Y轴的CSS 3D旋转导致Chrome中旋转的内容闪烁

来自分类Dev

在OpenGl中创建一个围绕其y轴连续旋转的三角形

来自分类Dev

Unity2D-为什么对象绕X / Y轴而不是Z旋转

来自分类Dev

围绕y轴旋转两个图像,使其边界相交

来自分类Dev

如何围绕3D轴(Y)旋转2D UIElement?

来自分类Dev

Three.js-围绕特定轴旋转对象

来自分类Dev

围绕x,y,z轴旋转纹理并使用它绘制多边形

来自分类Dev

Three.js-围绕轴旋转Object3D

来自分类Dev

如何围绕特定轴旋转矢量

来自分类Dev

如何在没有轴翻转或导致万向节锁定的情况下围绕 X、Y 和 Z 轴旋转 Object3d?

来自分类Dev

Threejs围绕Y旋转相机

Related 相关文章

  1. 1

    了解WebGL中围绕任意轴旋转背后的数学运算

  2. 2

    如何围绕3D轴(Y)旋转2D UIElement?

  3. 3

    jQuery围绕xy轴旋转矩形

  4. 4

    围绕对象轴THREE.js旋转对象

  5. 5

    使用Matrix4f围绕多个轴旋转盒子

  6. 6

    Android的“游戏旋转矢量”传感器会忽略围绕垂直轴的旋转吗?

  7. 7

    我可以使用swift在iOS中围绕y轴旋转对象,但是如何围绕单个轴旋转许多对象?

  8. 8

    围绕另一个点和X轴旋转点

  9. 9

    围绕X轴上的圆进行3D变换

  10. 10

    JavaFX的 - 围绕特定的X和Y旋转画布

  11. 11

    统一-围绕Y轴旋转对象,同时不断向地面设置不同的旋转

  12. 12

    使用四元数围绕轴旋转多个点

  13. 13

    ggplot2输出图像围绕x轴标签居中

  14. 14

    在间隔[0,π/ 4]上,由y = cos(x),x轴和y轴的图限制的固体体积围绕x轴旋转

  15. 15

    在循环中围绕自己的轴旋转每个元素(处理)

  16. 16

    为什么围绕原点旋转点会失去与原点的距离?

  17. 17

    为什么围绕原点旋转点会失去与原点的距离?

  18. 18

    围绕其自身的轴旋转3D图元

  19. 19

    围绕Y轴的CSS 3D旋转导致Chrome中旋转的内容闪烁

  20. 20

    在OpenGl中创建一个围绕其y轴连续旋转的三角形

  21. 21

    Unity2D-为什么对象绕X / Y轴而不是Z旋转

  22. 22

    围绕y轴旋转两个图像,使其边界相交

  23. 23

    如何围绕3D轴(Y)旋转2D UIElement?

  24. 24

    Three.js-围绕特定轴旋转对象

  25. 25

    围绕x,y,z轴旋转纹理并使用它绘制多边形

  26. 26

    Three.js-围绕轴旋转Object3D

  27. 27

    如何围绕特定轴旋转矢量

  28. 28

    如何在没有轴翻转或导致万向节锁定的情况下围绕 X、Y 和 Z 轴旋转 Object3d?

  29. 29

    Threejs围绕Y旋转相机

热门标签

归档