Значение m34 CATransform3D

Какое значение m34 структуры CATransform3D, я знаю только это, может изменить перспективу, но что значение, когда значение -0.001 и 0.001?

Ответ 1

Здесь вы можете найти подробные сведения здесь. Обратите внимание, что Apple использует обратный порядок умножения для проекции (относительно данной ссылки), поэтому все матричные умножения меняются на противоположные и все матрицы транспонируются.

Краткое описание значения:

  • m34 = 1/z расстояние до плоскости проектирования (член 1/e z в ссылочной ссылке)
  • + для оси z относится к зрителю, что приводит к ощущению "глядя в зеркало" при использовании -
  • центр проекции (0,0,0) плюс любые переведенные вами переводы.

Ответ 2

Я прочитал несколько статей, включая этот: https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreAnimation_guide/AdvancedAnimationTricks/AdvancedAnimationTricks.html#//apple_ref/doc/uid/TP40004514-CH8-SW13

Мои резолюции здесь:

Entities:

  • eye - расстояние от экрана до глаз
  • scale - визуальная шкала преобразованного объекта
  • distance - расстояние до преобразованного объекта

Сопряжение формул:

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

Пример вычисления z-расстояния для желаемого масштаба выбранного расстояния глаз:

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);
}