Какое значение m34 структуры CATransform3D, я знаю только это, может изменить перспективу, но что значение, когда значение -0.001 и 0.001?
Значение m34 CATransform3D
Ответ 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);
}