значение m34 CATransform3D - PullRequest
       6

значение m34 CATransform3D

15 голосов
/ 07 октября 2010

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

Ответы [ 2 ]

18 голосов
/ 29 сентября 2011

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

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

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

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

Мои решения здесь:

Объекты:

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