meaning of m34 of CATransform3D

后端 未结 2 1622
你的背包
你的背包 2020-12-23 14:56

What\'s the meaning of m34 of the structure CATransform3D, I only know it can change the perspective, but what\'s the meaning when the value is -0.001 and 0.001?

相关标签:
2条回答
  • 2020-12-23 15:33

    You can find the full details here. Note that Apple uses the reversed multiplication order for projection (relative to the given link) so all matrix multiplications are reversed and all matrices are transposed.

    A short description of the meaning:

    • m34 = 1/z distance to projection plane (the 1/ez term in the reference link)
    • + for the z axis is towards the viewer, resulting in a "looking in the mirror" feel when using -
    • projection center is (0,0,0) plus any translations you set up
    0 讨论(0)
  • 2020-12-23 15:33

    I read some articles including this one: https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreAnimation_guide/AdvancedAnimationTricks/AdvancedAnimationTricks.html#//apple_ref/doc/uid/TP40004514-CH8-SW13

    My solutions is here:

    Entities:

    • eye - distance from screen to eye
    • scale - visual scale of transformed object
    • distance - distance to transformed object

    Connecting formulas:

    • scale = eye / (eye + distance)
    • distance = eye * (1.0/scale - scale)
    • eye = distance / (1.0/scale - scale)

    Example of computing z-distance for desized scale of selected eye distance:

    CATransform3D transformByScaleAndEye(CGFloat scale, CGFloat eye) {
        CATransform3D t = CATransform3DIdentity;
        t.m34 = -1.0 / eye;
        CGFloat distance = -eye*(1.0/scale - scale);
        return CATransform3DTranslate(t, 0, 0, distance);
    }
    
    0 讨论(0)
提交回复
热议问题