В чем смысл m34 структуры CATransform3D, я знаю только, что он может менять перспективу, но какой смысл, когда значение равно -0,001 и 0,001?
значение m34 CATransform3D
comment
m34 означает запись в позиции 3,4 в матрице. developer.apple.com/documentation/quartzcore/catransform3d/
- person Koen.   schedule 21.09.2020
Ответы (2)
Полную информацию можно найти здесь. Обратите внимание, что Apple использует обратный порядок умножения для проецирования (относительно данной ссылки), поэтому все умножения матриц обратные, а все матрицы транспонированы.
Краткое описание смысла:
- m34 = расстояние 1/z до плоскости проекции (термин 1/ez в справочной ссылке)
- + поскольку ось z направлена к зрителю, что приводит к ощущению «смотрения в зеркало» при использовании -
- центр проекции равен (0,0,0) плюс любые переводы, которые вы настроили
person
Mihai Timar
schedule
29.09.2011
Что такое
1/z
? Я все еще не понимаю твоего объяснения. Что означает м34? Что делают изменения?
- person confile; 04.06.2015
z — расстояние до вашей плоскости проекции, m43 = 1/z. Я обновил ответ, чтобы сделать этот момент немного яснее. Изменения изменяют расстояние и заставляют перспективу выглядеть по-разному на одной и той же сцене.
- person Mihai Timar; 05.06.2015
Я прочитал несколько статей, включая эту: 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);
}
person
k06a
schedule
19.01.2017